gpt4 book ai didi

c++ - 防止 boost::asio::io_context 在没有更多工作要做时返回

转载 作者:行者123 更新时间:2023-11-30 03:18:26 32 4
gpt4 key购买 nike

boost::asio::io_context::run() 确实在没有待处理的工作时返回。我想避免这种行为,这样 run() 就会无限期地等待新作品,并有可能从另一个线程停止它。

我想这可以通过在 io_context 中启动一个无限长的计时器,并在我们需要 时调用该计时器上的 cancel() 来完成run() 返回。

这是一种正确的方法吗?是否有一种干净的方法来做到这一点?

最佳答案

您可以使用 executor_work_guard .在 ctor 中,它从 io_context 实例中获取执行器并在此执行器上调用 on_work_started 这意味着当没有工作要做时 io_context::run 不会结束 see reference .

This ensures that the io_context's run() and run_one() functions do not exit while the work is underway.

所以简单的代码看起来像

  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 析构函数时结束。

在较旧的 bo​​ost 或 asio 版本上,等效类是 io_service::work

关于c++ - 防止 boost::asio::io_context 在没有更多工作要做时返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54751302/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com