c++ - 使用信号和线程的事件管理器

标签 c++ multithreading boost bind signals

我想知道使用 Boost::signals2 和 Boost::thread 构建多线程事件系统的最佳方法是什么。

在我的项目中,我有一个网络类,它在一个线程中监听传入的连接。当玩家连接时,该类应该能够向我的服务器处理程序类和其他监听信号的函数发出事件。问题是,服务器和其他函数也可以在线程中,被调用的函数不能在网络类上下文中,而是在订阅事件的上下文中。

最好的方法是什么?我听说过轮询,但我不确定如何在这里使用它,使用线程和信号。

tldr:能够监听其他线程中的信号。

最佳答案

既然您无论如何都在编写基于网络的代码,您是否考虑过boost asio

简而言之,从多个线程调用 boost::asio::io_service::run 允许您以多线程方式处理事件。此外,您可以使用 io_service::post 将工作发布到 io_service,这将导致 io_service 在 run 方法中阻塞的线程中执行工作。有关更多信息,请阅读此 SO post . game-dev 链接很好地介绍了 asio 及其使用方法。 asio 还提供了 poll 方法等等。

在我看来,asio 非常适合您要实现的目标。

关于c++ - 使用信号和线程的事件管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8038026/

相关文章:

linux - 如何从boost创建一个库?

c++ - 后续用C++对Files进行读写操作

c++ - Clang tidy 对于静态成员变量无法正常工作

c++ - key 存在于 map 变量中,但 find 找不到它

c++ - 寻找对我的读者/作家实现的批评

java - 关于并行运行线程并在之后返回

c - 为什么只有 2 个线程处于事件状态时 pthread_create() 会失败?

c++ - boost 不同的工具集

c++ - 使用CMake在特定于应用程序的子文件夹中查找依赖项

c++ - 具有常量变量的类的多个实例对常量使用相同的内存?