我希望能够将一组处理程序发布到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!”?
增强版本:1.71.0
答案 0 :(得分:2)
您必须致电restart:
run()函数的正常退出意味着io_context 对象已停止(stopped()函数返回true)。后续的 调用run(),run_one(),poll()或poll_one()将返回 立即进行,除非事先调用过restart()。
<form action="/pluginschecker/" onsubmit="" id="u_0_2">
<input type="hidden" name="jaze" value="2716" autocomplete="off">
<input type="hidden" name="lsd" value="AVqy5g7x" autocomplete="off">
<input type="hidden" autocomplete="off" name="ch_id" value="109730423727037">
<input type="hidden" autocomplete="off" name="app_id" value="1678638095724206">
<input type="hidden" autocomplete="off" name="idref" value="cf_69l1GwTUx8O5X7IM">
<input type="hidden" autocomplete="off" name="plugin_state" value="unchecked" id="u_0_3">
<input type="hidden" autocomplete="off" name="checked_out_of_view" value="prechecked_unchecked" id="u_0_4">
<div class="_7o35">
<div class="_qpo _39j1">
<div class="_7o3x">
<div class="uiInputLabel clearfix" id="u_0_5">
<label class="_kv1 _55sg _7o3q uiInputLabelInput">
<input type="checkbox" id="u_0_1">
<span class="_66ul"></span></label>
<label class="_7o3z _7o3- uiInputLabelLabel" for="u_0_1">
<div class="_7o41 _7o42">