asio定时器expires_after函数会先调用cancel函数

  asio::io_context io_context;
 
  testWait tc;
  steady_timer timerTest(io_context);
  {
    
      timerTest.expires_after(std::chrono::seconds(600));
      
     
      timerTest.async_wait(std::bind(&testWait::waitHandle, &tc,std::placeholders::_1));
      timerTest.async_wait(std::bind(&testWait::waitHandle2, &tc));
      
      timerTest.expires_after(std::chrono::seconds(30));  //这个调用会导致timerTest中原先已经在异步等待的回调被立即调用(下一个事件循环)并且回调函数errorcode不为0,其实就是会先调用cancel函数
      timerTest.async_wait([](const std::error_code& ec) {
          if (!ec)
          {
              std::cout << "lambda wait" << std::endl;   //30秒后调用
          }
          else
          {
              std::cout << "lambda err code:" << ec.value() << " what" << ec.message() << std::endl;
          }
          }
          );
  }

 源码注释

 

posted @ 2025-04-25 11:58  乐swap火  阅读(43)  评论(0)    收藏  举报