异步使用定时器
代码:
void print(const boost::system::error_code& e)
{
std::cout << "Hello!" << std::endl;
}
int main()
{
boost::asio::io_context io_ctx;
boost::asio::steady_timer t(io_ctx, boost::asio::chrono::seconds(5));
t.async_wait(&print);
io_ctx.run();
return 0;
}
注意
- asio库能保证只有当前调用io_context::run()的线程调用回调函数。
- 除非io_context::run()被调用,否则异步等待完成的回调函数永远不会被调用。
为回调函数绑定参数(实现重复定时)
为了实现重复定时,需要在回调函数里修改steady_timer的过期时间,因此要把steady_timer传给回调函数:
void print(const boost::system::error_code& e, boost::asio::steady_timer *t, int *count)
{
std::cout << "Hello!" << std::endl;
if(*count < 10) {
++*count;
t->expires_at(t->expiry() + boost::asio::chrono::seconds(1));
t->