我正在编写一个跨平台的程序,它使用一个小型RARP服务器(使用winpcap/pcap实现),并运行两个TCP服务器。我必须使用C++。
因此,我将至少有4个线程,主线程包括控制器、2个TCP/IP异步套接字和RARP服务器。
我计划使用c++ BOOST Asio和线程,因为我需要在linux和windows XP上运行这个程序。(我不能使用Qt)
我将执行异步线程间通信。
例如,在不阻塞循环的情况下,在循环内发生火灾事件
我该怎么做呢?最好是带便携的书库。
谢谢
发布于 2010-08-15 22:27:36
对此没有通用的解决方案,您不能只是中断线程并传递要处理的通知。这会导致可怕的重新进入问题和大量的死锁。只有当线程处于静止状态时,才能处理通知。
操作系统通常具有使其成为可能的可用服务。在Windows中,这通常是通过将消息发送到消息队列来完成的。由消息循环读取,这是UI线程的“空闲”状态。或者利用异步过程调用,在线程阻塞并显式允许APC运行时触发。
但您需要一个非平台特定的解决方案,从而切断了这一点。在这种情况下,你几乎注定要重新发明一个操作系统功能。您将需要一个线程安全队列,在需要接收通知的线程中轮询该队列。消息队列,由消息循环读取。
发布于 2010-08-16 00:17:05
看一看ICE messaging
它支持进程之间的同步和异步消息传递,无论它们是否在同一节点上。
有用于C++、Obj-C、Java、C#、Python、Ruby和PHP的绑定。
https://stackoverflow.com/questions/3486963
复制相似问题