【发布时间】:2008-12-10 12:58:50
【问题描述】:
我对 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 );
但是这种方法只影响一个线程。 如何检查所有线程都在运行并且没有死锁?
【问题讨论】:
标签: c++ boost boost-asio