Boost.Aiso教程 2

来源:互联网 发布:java开发平台结构图 编辑:程序博客网 时间:2024/06/05 19:46

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;

}


0 0
原创粉丝点击