c++ - 任何获取有关 io_service 的附加信息的方法

标签 c++ boost-asio

在尝试完全关闭 asio 应用程序时,我发现我不知道 ios 停止是因为我调用了 .stop() 还是因为它用完了处理程序,这让我很恼火。
此外,当我想杀死它时,我无法找到一种方法来查看它的处理程序 q 中是否有处理程序,或者即使某些处理程序正在运行 atm。
所以
1) 以任何方式查看是什么停止了 ios - .stop 或工作用完(糟糕的手动 bIsAppShuttingDown 标志除外)
2)有什么方法可以查看 io_service(在我调用停止后)是否仍在处理某些东西? 所以我可以写

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

最佳答案

通常,模式是在单独的线程中调度 io_service,例如:

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

随后,如果你想停止它并等待它干净地完成,那么最好的方法是:

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

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

关于c++ - 任何获取有关 io_service 的附加信息的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21333414/

相关文章:

c++ - Boost::Thread - 线程创建问题

c++ - boost asio steady_timer 上的多个递归 async_wait

c++ - 在 unix 套接字上调用 async_connect 有意义吗?

c++ - 围绕 C Dirent.h 的现代 C++ 包装器

c++ - 在 C++ 中传递对象会出现 'invalid use of non-static member' 错误

c# - 在 C# 中解析和分析 C++ 代码

c++ - boost::asio 和 send() 的使用

c++ - 如何将组合的 Asio 操作与 C++20 协程一起使用以返回值?

c++ - 二叉搜索树未处理的异常

c++ - linux中的pthread_mutex_t是否可重入(如果一个线程试图获取它已经持有的锁,则请求成功)