Prevent boost::asio::io_context from returning when there is no more work to do(当没有更多的工作要做时,防止Boost::ASIO::IO_CONTEXT返回)
问题描述
boost::asio::io_context::run()
在没有挂起的工作时返回。我希望避免此行为,以便run()
确实无限期地等待新工作,并有可能从另一个线程停止它。
我想这可以通过在io_context
中启动一个无限长的计时器,并在我们希望run()
返回时调用该计时器来实现。
这是正确的方法吗?有干净的方法吗?
推荐答案
可以使用executor_work_guard。
在ctor中,它从io_CONTEXT实例中获取Executor并在此Executor上调用on_work_started
,这意味着io_context::run
不会在没有工作要做时结束see reference。
这可确保io_Context的run()和run_one()函数 工作正在进行时不退出。
所以简单的代码看起来像
boost::asio::io_context io;
boost::asio::executor_work_guard<decltype(io.get_executor())> work{io.get_executor()};
io.run(); // [1]
cout << "you will never see this line" << endl;
代码挂起在1行。io_context::run
可能在调用work
析构函数时结束。
在较早的Boost或ASIO版本上,对应的类为io_service::work
这篇关于当没有更多的工作要做时,防止Boost::ASIO::IO_CONTEXT返回的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:当没有更多的工作要做时,防止Boost::ASIO::IO_CONTEXT返回
基础教程推荐
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- C++,'if' 表达式中的变量声明 2021-01-01
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 设计字符串本地化的最佳方法 2022-01-01
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01