gpt4 book ai didi

c++ - ASIO io_service 不在第二次 run() 调用时处理后处理程序

转载 作者:太空宇宙 更新时间:2023-11-03 17:25:11 24 4
gpt4 key购买 nike

我希望能够将处理程序组发布到 boost::asio::io_service,然后运行所有这些处理程序。当所有处理程序完成后,我想添加一组新的处理程序并再次 run() 。并在一个线程中永远重复这一点。

但我有一个问题,在第一次 run() 调用后,下一个发布的作业将被忽略。

这是一个小例子(coliru):

#include <iostream>
#include <boost/asio.hpp>

int main()
{
boost::asio::io_service io;

io.post([]{ std::cout << "Hello";});
io.run();
io.post([]{ std::cout << ", World!" << std::endl; });
io.run();
}

它只会打印“Hello”消息,然后成功退出。

为什么这个例子不打印“Hello, World!”?

boost 版本:1.71.0

最佳答案

你必须调用restart :

A normal exit from the run() function implies that the io_context object is stopped (the stopped() function returns true). Subsequent calls to run(), run_one(), poll() or poll_one() will return immediately unless there is a prior call to restart().

io.post([]{ std::cout << "Hello";});
io.run();
io.post([]{ std::cout << ", World!" << std::endl; });
io.restart(); // just here
io.run();

关于c++ - ASIO io_service 不在第二次 run() 调用时处理后处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59529350/

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