以下兩個示例都是使用計時器的例子,超時時長設置爲5秒
1. 使用計時器同步等待超時
#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
int main()
{
// 如果採用boost舊版本,則: boost::asio::io_service io;
boost::asio::io_context io;
boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
// 同步等待
t.wait();
std::cout << "Hello, world!" << std::endl;
return 0;
}
2. 使用計時器異步等待超時
#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
void print(const boost::system::error_code& /*e*/)
{
std::cout << "Hello, world!" << std::endl;
}
int main()
{
boost::asio::io_context io;
boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
t.async_wait(&print);
io.run();
return 0;
}
注意對比兩個示例: 在同步場景中,並不需要調用boost::asio::io_context 的run(),實際在例子1中,就算調用,run()函數由於不存在等待異步執行的完成handler需要執行,也會馬上返回。在示例2中,需要等待print執行之後,run()函數纔會返回,最後退出main函數