我正在制作一个跨平台程序,它嵌入了一个小型 RARP 服务器(使用 winpcap/pcap 实现)并运行 2 个 TCP IP 服务器。我必须使用 C++。
所以我将至少有 4 个线程,主线程负责 Controller 、2 个 TCP/IP 异步套接字和 RARP 服务器。
我计划使用 c++ BOOST Asio 和 Thread,因为我需要在 linux 和 windows XP 中运行这个程序。 (而且我不会使用 Qt)
我会执行异步线程间通信。
例如在不阻塞循环的情况下在循环内触发事件
我该怎么做?最好有可移植图书馆。
谢谢
最佳答案
对此没有通用的解决方案,您不能只中断一个线程并发送一个通知进行处理。这会导致可怕的重入问题和大量死锁。只有当线程处于静止状态时才能处理通知。
操作系统通常提供使之成为可能的服务。在 Windows 中,这通常是通过将消息发布到消息队列来完成的。由消息循环读取,这是 UI 线程的“空闲”状态。或者通过利用异步过程调用,在线程阻塞时触发并明确允许 APC 运行。
但是您需要一个非平台特定的解决方案来切断它。在这种情况下,您几乎注定要重新发明操作系统功能。您需要一个线程安全的队列,您可以在需要接收通知的线程中轮询该队列。消息队列,由消息循环读取。
关于c++ - 异步线程间通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3486963/