2010-08-15 152 views
2

我正在制作一个嵌入了一个小型RARP服务器(用winpcap/pcap实现)并运行2个TCP IP服务器的交叉平台程序。我必须使用C++。异步线程间通信

所以我至少要有4个线程,主控制器,2个TCP/IP异步套接字和RARP服务器。

我打算使用C++ BOOST Asio和Thread,因为我需要在Linux和Windows XP中运行这个程序。 (我不能使用Qt)

我会执行异步的线程间通信。

对于一个循环内为例火灾事件,而阻塞循环

我怎样才能做到这一点?最好带有便携式图书馆。

谢谢

+4

我想如果你问这个问题的更窄版本,你会有更好的运气得到答案。你在这里有几个问题,有些与别人没有关系......它非常分散。 – SoapBox 2010-08-15 10:46:16

回答

3

有没有通用的解决方案,这一点,你不能只中断一个线程,并提供待处理的通知。这会导致可怕的重入问题和大量的僵局。只有当线程处于静止状态时才能处理通知。

操作系统通常具有使其成为可能的服务。在Windows中,这通常是通过向消息队列发布消息来完成的。通过消息循环读取,这是UI线程的“空闲”状态。或者通过利用异步过程调用,在线程阻塞并显式允许APC运行时触发。

但是,您通过要求非平台特定的解决方案来减少这种情况。在这种情况下,你几乎注定要重新发明操作系统功能。您需要一个线程安全队列,您需要在需要接收通知的线程中进行轮询。消息队列,由消息循环读取。

+0

因为我已经使用boost asio,所以使用boost asio io_service对象进行异步函数调用。谢谢。 – MiniScalope 2010-08-20 12:23:00

2

看看ICE messaging

它支持进程之间syncrhonous和asyncrounous消息是否是同一个节点上与否。

有C++,Obj-C,Java,C#,Python,Ruby和PHP的绑定。