用线程实现事件机制的问题?
具体描述如下,希望能将这个问题说清楚:
条件:进程A是主程序,和进程B在同一台机器,A和B通过共享内存实现进程通信;进程C属于远程,B和C通过socket通信组成一套监控程序的Server/Client, B能根据C的请求发送相应的信息给C(响应事件)。
( A ---> B <-----> C )
流程:进程A只负责向进程B源源不断地发送相关的信息(比如各个房间里的聊天信息);B根据C的请求发送给C相应的内容,比如C发送给B一个房间ID,然后B就把主程序(即A)发送给B的所有这个房间ID里面的信息发送给C;
我的实现:因为B要保证能够接收A源源不断发给它的信息,所以我直接开了一个thread来无限循环地接收(当然,会让它sleep一会儿);然后B和C之间:因为B一旦接收到C的请求后也要源源不断地将特定的信息发送给C,所以我也是直接又开了一个thread来无限循环发送。
我的问题:按上面的实现问题就来了:C开始发送一个房间ID给B,B用一个线程处理,不过到后面B根据C的请求向C发送另一个房间的信息的话(响应另一一个事件)必须终止之前的发送循环。因为要考虑移植性,所以大部分代码都基于boost库,win32 API也就没辙了,但是boost 的线程库在这方面提供的接口实在太少,没有通过一个线程去结束另一个线程或者给线程构造函数提供CREATE_SUSPEND之类的选项。
向大家请教一下这个问题的解决方法,是取消线程处理选用另外的机制?还是其他更好的方法?Thanks!
之所以把我的实现也贴出来,是想高手们发现这个方法不行的话能不吝赐教!
[解决办法]
B1 <-----> C1
A ---> B2 <-----> C2
.
B3 <-----> C3
数据中心
你为每一个客户端起一个线程B处理,
做个共享的数据中心: B1在和c1通信,此时,c1要把信息发给c2;
那么B1和c1中断,同时把想要发送给c2的信息指令存到你建的数据中心
B一直监听"共享数据中心的",如果有数据,则取出,判断是否发给哪个客户端,即目前的c2
注:数据共享可以,但是线程while+sleep无限监听不提倡,建议用消息队列。