以下两个示例都是使用计时器的例子,超时时长设置为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函数
来源:oschina
链接:https://my.oschina.net/u/4395566/blog/3231003