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));//第一個參數(shù)是一個io吮炕,定時器以其為基準媒役,第二個參數(shù)設置了定時器時間暴备,需要注意的是,定時器從此時就開始計時了
std::cout << "wait......" << std::endl;
//t.wait(); //調用wait()函數(shù)锨阿,程序將阻塞等待宵睦,如果此時已經超過了計時器的定時,就會立即返回繼續(xù)執(zhí)行下面的函數(shù)群井。否則就等待計時結束状飞。
t.async_wait(&print); //異步定時器
std::cout << "Hello, asio!" << std::endl;
io.run(); //使用異步定時器必須調用該函數(shù)
//回調函數(shù)只有在io.run()被調用時才會執(zhí)行毫胜,否則永遠都不會執(zhí)行书斜。io.run()會等待所有分配給這個io的任務執(zhí)行完,然后返回退出酵使,反過來說荐吉,調用run之前,必須分配了任務口渔,不然它會立刻返回样屠。
getchar(); //使命令行停留
return 0;
}
2 運行結果
啟動.png
異步定時器回調.png
可以看到調用t.async_wait(&print);
之后程序就繼續(xù)執(zhí)行了,直到定時器計數(shù)5秒才調用了回調函數(shù)缺脉。