Timer.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_service io; boost::asio::deadline_timer t(io, boost::posix_time::seconds(5)); t.async_wait(&print); io.run(); return 0; }
#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
使用澳洲的异步功能意味着将异步操作完成时调用的回调函数。在这个程序中,我们定义调用print在异步等待完成时要调用的函数。
void print(const boost::system::error_code& /*e*/)
{
std::cout << "Hello, world!" << std::endl;
}
int main()
{
boost::asio::io_service io;
boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
下一步,而不是做在教程 Timer.1 阻塞等待,我们调用deadline_timer::async_wait()函数来执行异步等待。调用此函数时,我们通过了上述定义print回调处理程序。
t.async_wait(&print);
aiso库提供了保证,只会从目前正在调用io_service::run()的线程调用处理程序的回调。因此除非调用io_service::run()函数将永远不会调用回调的异步等待完成。
Io_service::run()函数也将继续运行,而是仍然"工作"要做。在此示例中,工作是异步等待计时器,所以调用不会返回直到计时器已过期和回调已完成。
它是重要的是记住给 io_service 一些工作要做在调用io_service::run()之前。例如,如果我们忽略了对deadline_timer::async_wait()的上述调用,io_service 有限,不会有任何的工作要做,并因此将立即返回io_service::run() 。
io.run();
return 0;
}