01-Timer.1-Using a timer synchronously

第一部分中的教程程序介绍了使用asio工具包所需的基本概念。在深入复杂的网络编程世界之前,这些教程程序通过简单的异步计时器演示了基本技能。

本节的主要内容为:使用同步计时器的基础教程

// 包含必要的头文件
// 所有的asio类都能通过包含头文件 asio.hpp 后使用
#include <asio.hpp>
#include <iostream>
#include <spdlog/spdlog.h>

int main(int argc, char* argv[])
{
    spdlog::info("Start wait 5 seconds");

    // 所有使用asio的程序都需要至少一个I/O执行上下文,比如io_context或thread_pool对象。
    // I/O执行上下文提供了对I/O功能的访问。
    asio::io_context io;
    // 接下来我们声明一个类型为asio::steady_timer的对象。
    // 提供I/O功能(或本例中的定时器功能)的核心asio类总是以执行器或对执行上下文(如io_context)的引用作为其构造函数的第一个参数。
    // 构造函数的第二个参数将定时器设置为从现在起5秒后到期。
    // 在这个简单的例子中,我们对计时器执行了阻塞等待。也就是说,steady_timer::wait()的调用在计时器到期之前不会返回,
    // 计时器是在创建5秒后到期(而不是从等待开始时计算)。
    asio::steady_timer t(io, std::chrono::seconds(5));
    //定时器始终处于两种状态之一:“已过期”或“未过期”。如果在已过期的定时器上调用 steady_timer::wait() 函数,它将立即返回。
    t.wait();
    //最后我们打印出必不可少的"Hello, world!"消息,用于显示计时器已到期。
    spdlog::info("Hello, world!");

    return 0;
}