我想知道使用 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/