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

时间:2019-12-30 10:34:14

标签: c++ boost boost-asio

我希望能够将一组处理程序发布到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

1 个答案:

答案 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">
相关问题