以任何方式获取有关io_service的其他信息

时间:2014-01-24 13:02:21

标签: c++ boost-asio

在尝试破解asio应用程序的干净关闭时,我发现非常恼火,我不知道ios是否因为我调用.stop()或因为处理器耗尽而停止了。 此外,当我想要杀死它时,我无法找到一种方法来查看它是否在处理程序q中有处理程序,或者即使某些处理程序正在运行atm。 所以
1)任何方式来查看什么停止ios - 。停止或停止工作(除了可怕的手动bIsAppShuttingDown标志)
2)任何方式来看看io_service(在我调用stop之后)是否还在处理某些事情? 所以我可以写

ios->stop()
while(! ios.finished())
sleep(1) // :/
delete ios;

1 个答案:

答案 0 :(得分:1)

通常,模式是在单独的线程中在io_service上分派,例如:

_thread.reset(new std::thread([&]() { _service.run(); }); // so the dispatching here is in a thread

随后,如果您想要停止并等待它干净利落,那么最好的方法是:

_service.stop();
_thread->join();

这样调用线程就会被阻塞,直到调度线程终止(这是在执行最后一个处理程序(run())的调用完成时发生的。没有办法(AFAIK)知道io_service是否用尽了工作或是否调用stop(),您当然可以通过在服务上实例化io_service::work来阻止前者。请参阅文档。