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; } } ); }
源码注释
纯属记录程序人生,如有差错,欢迎指正,轻喷