Boost.Aiso教程 2

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
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道格拉斯范朋克

播种花生牛奶自留田

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值