1 源码及注释
#include "stdafx.h"
#include <iostream>
#include <boost/asio.hpp> //只需要添加此头文件就可以使用asio
#include <boost/date_time/posix_time/posix_time.hpp>//因为要使用计时器,所以添加此头文件
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 运行结果
可以看到调用t.async_wait(&print);
之后程序就继续执行了,直到定时器计数5秒才调用了回调函数。