当asio以异步的方式工作时,是以单线程的方式运行,当需要使用定时器时,也需要使用异步的方式:
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time_types.hpp>
#include <iostream>
#include <chrono>
using namespace boost::asio;
using namespace std;
static int s_timerNum = 0;
unsigned long getTimestamp()
{
return std::chrono::system_clock::now().time_since_epoch().count()/std::chrono::system_clock::period::den;
}
void timer_handler(const boost::system::error_code& err)
{
if (err)
{
cout << getTimestamp() << " Timer cancel" << endl;
return;
}
cout << getTimestamp() << " Timer on"<<endl;
}
int main()
{
io_service ios;
cout << getTimestamp() << " Timer enable" << endl;
deadline_timer t(ios, boost::posix_time::seconds(2));
t.async_wait(timer_handler);
ios.run();
return 0;
}