gpt4 book ai didi

boost - 保持 io_service 存活

转载 作者:行者123 更新时间:2023-12-01 09:19:34 27 4
gpt4 key购买 nike

我更喜欢使用 io_service 的方式是在应用程序启动时创建一个线程来执行 io_service的运行方法。问题是,如果 io_service 没有任务,它的 run 方法立即返回并且线程终止。

正如您从 chat_client.cpp 中看到的

...
boost::asio::io_service io_service;
...
chat_client c(io_service, iterator);
boost::thread t(boost::bind(&boost::asio::io_service::run, &io_service));

线程启动 一些异步任务被添加到 io_service .这是在 chat_clients 中完成的的构造函数。

我的问题是:有没有办法创建线程 之前 一些任务被添加到 io_service , 一世。 e.
// create io_service and thread on application start
boost::asio::io_service io_service;
boost::thread t(boost::bind(&boost::asio::io_service::run, &io_service));
// add some task to io_service
chat_client c(io_service, iterator);

最佳答案

正如你所说,它的run方法立即返回,因为它没有工作。
您需要使用 boost::asio::io_service::work .把它想象成一个虚拟的工作项,所以 io_service::run 永远不会用完工作,因此不会立即返回。

例子:

    auto work = boost::make_shared<boost::asio::io_service::work>(m_ioservice);
m_ioservice.run();

有些人更喜欢 io_service::run 一直阻塞,等待工作。其他人更喜欢 Asio 默认给你的行为。

关于boost - 保持 io_service 存活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35945490/

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