Boost.Asio——(3)异步定时器

1 源码及注释

#include "stdafx.h"
#include 
#include    //只需要添加此头文件就可以使用asio
#include //因为要使用计时器,所以添加此头文件

void print(const boost::system::error_code&)
{
    std::cout << "Hello, print!" << std::endl;
}
int main()
{
    
    boost::asio::io_service io;     //使用asio至少需要一个io对象
    boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));//第一个参数是一个io,定时器以其为基准,第二个参数设置了定时器时间,需要注意的是,定时器从此时就开始计时了
    std::cout << "wait......" << std::endl;                         
    //t.wait();                                                         //调用wait()函数,程序将阻塞等待,如果此时已经超过了计时器的定时,就会立即返回继续执行下面的函数。否则就等待计时结束。
    t.async_wait(&print);                                               //异步定时器
    std::cout << "Hello, asio!" << std::endl;
    io.run();                                                           //使用异步定时器必须调用该函数
    //回调函数只有在io.run()被调用时才会执行,否则永远都不会执行。io.run()会等待所有分配给这个io的任务执行完,然后返回退出,反过来说,调用run之前,必须分配了任务,不然它会立刻返回。

    getchar();   //使命令行停留

    return 0;
}

2 运行结果

Boost.Asio——(3)异步定时器_第1张图片
启动.png
Boost.Asio——(3)异步定时器_第2张图片
异步定时器回调.png

可以看到调用t.async_wait(&print);之后程序就继续执行了,直到定时器计数5秒才调用了回调函数。

你可能感兴趣的:(Boost.Asio——(3)异步定时器)