Boost.Aiso教程 2

xiaoxiao2021-02-28  97

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; }

此教程程序演示如何使用澳洲的异步回调功能修改程序,从教程 Timer.1 执行异步等待计时器。 #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);

最后,我们必须在 io_service 对象上调用io_service::run()成员函数。 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;

}

转载请注明原文地址: https://www.6miu.com/read-74767.html

最新回复(0)