我对 boost::asio 库没什么问题。我的应用程序异步接收和处理数据,它创建线程并在每个线程上运行 io_service.run()。
boost::asio::io_service io;
boost::thread_group thread_pool;
...
int cpu_cnt = get_cpu_count();
for (int i = 0; i < cpu_cnt; ++i)
{
thread_pool.create_thread( boost::bind(&run_service, &io) );
}
void run_service(boost::asio::io_service* io)
{
try
{
io->run();//make fun
}
catch(const std::exception& e)
{ //process error
}
catch(...)
{ //process error
}
}
一次又一次,我的应用程序从某个主管应用程序接收消息(通过 Windows 消息传递系统),该应用程序检查我的程序是否处于活动状态。如果我的应用程序没有回复,它将重新启动。这里棘手的部分是检查线程是否正在运行并且没有死锁。我可以像这样将处理程序发布到 io_service:
io.post( &reply_to_supervisor );
但这种方法只影响一个线程。如何检查所有线程是否正在运行并且没有死锁?