Timer.1 使用同步定时器

Timer.1——使用同步定时器 #

原文链接 | 源码链接

本教程通过展示如何在计时器上执行阻塞等待来介绍 asio。

首先包含必要的头文件,只需包含“asio.hpp”头文件即可使用所有 asio 类。

#include <iostream>
#include <boost/asio.hpp>

所有使用 asio 的程序都需要至少有一个 I/O 执行上下文(execution context),例如 io_context 或 thread_pool 对象。 I/O 执行上下文提供对 I/O 功能的访问。我们首先在 main 函数中声明一个 io_context 类型的对象。

int main()
{
  boost::asio::io_context io;

接下来我们声明一个 boost::asio::steady_timer 类型的对象。提供 I/O 功能(或本例中的定时器功能)的 asio 类始终采用执行器(executor)或对执行上下文的引用(例如 io_context)作为其构造函数的第一个参数。构造函数的第二个参数将计时器设置为从现在起 5 秒后到期。

  boost::asio::steady_timer t(io, boost::asio::chrono::seconds(5));

在这个简单的示例中,我们对计时器执行阻塞等待。也就是说,对 stable_timer::wait() 的调用将不会返回,直到定时器到期,即t被创建的 5 秒后(而不是从调用wait方法 5 秒后)。

定时器始终处于以下两种状态之一:“已到期”或“未到期”。如果在到期的计时器上调用 steady_timer::wait() 函数,它将立即返回。

  t.wait();

最后,我们打印“Hello, world!”信息以显示计时器到期了。

  std::cout << "Hello, world!" << std::endl;

  return 0;
}