c++ - 异步线程间通信

标签 c++ multithreading events boost signals

我正在制作一个跨平台程序,它嵌入了一个小型 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/

相关文章:

c++ - 我们能把这样的结构变成类型化的类/函数吗?

jquery - 防止 iOS 捏合事件注册为点击

c++ - FLTK g++ 编译错误

c++ - msgpack C++ 实现 : How to pack binary data?

c++ - 如何在 QTextTable 中居中文本

c++ - C++ 中的类助手

multithreading - I/O 完成端口 (Windows) 或异步 I/O (AIO) 是否会提高处理大量请求的多线程服务器的性能?

c++ - 计算创建 n 个线程所花费的时间

multithreading - Golang 线程池调度程序的目的和顺序

events - 确定用户是否单击滚动条或内容(onclick 对于 native 滚动条)