这与这个问题有些相关,但我想我需要多了解一点.我一直试图让我的头脑在几天内完成这项工作(同时处理其他部分),但现在是时候咬紧牙关并获得多线程了.另外,我提供的信息比链接的问题要多一些.
首先,关于多线程.因为我一直在测试我的代码,所以我没有烦恼任何多线程.它只是一个控制台应用程序,它启动与测试服务器的连接,然后处理其他所有内容.主循环是这样的:
while(true)
{
Root::instance().performIO(); // calls io_service::runOne();
}
Run Code Online (Sandbox Code Playgroud)
当我编写我的主应用程序时,我猜这个解决方案是不可接受的(因为它必须在消息循环中调用,尽管可能,当消息队列阻塞等待消息时会出现问题.你可以更改它,以便消息循环不会阻止,但那不会打破通过屋顶的CPU使用率吗?)
似乎解决方案是抛出另一个线程.好的.但是当我io_service::run()没有工作要做的时候,我已经阅读了这些回报.那是什么?那是没有数据,还是没有连接?如果至少存在一个连接,它是否仍然存活?如果是这样,那就不是问题了,因为我只需要在第一次连接时启动一个新线程,如果在没有任何事情发生时全部停止,我很高兴.我想我对"没有工作要做"的定义感到困惑.
然后我不得不担心我的boost线程与我的主GUI线程同步.所以,我想我的问题是:
boost::asio::post,以便稍后在io_service中进行调用?今天我会再读一些,但是从已经做过这件事的人那里得到一个很好的帮助会很棒.Boost :: asio文档并不是很好,到目前为止我的大部分工作都是基于一些文档,一些试验/错误,网上的一些示例代码.