MST

星途 面试题库

面试题:网络编程之Boost.Asio定时器基础

在Boost.Asio中,简述如何创建一个简单的一次性定时器,并在定时器到期时执行一个回调函数。请给出关键代码片段及简要说明。
21.3万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试
  1. 关键代码片段
#include <iostream>
#include <boost/asio.hpp>

void print(const boost::system::error_code& ec) {
    if (!ec) {
        std::cout << "Timer expired" << std::endl;
    }
}

int main() {
    boost::asio::io_context io;
    boost::asio::steady_timer timer(io, boost::asio::chrono::seconds(5));
    timer.async_wait(print);
    io.run();
    return 0;
}
  1. 简要说明
    • 首先包含必要的头文件,<iostream>用于标准输入输出,<boost/asio.hpp>引入Boost.Asio库。
    • print函数是定时器到期时执行的回调函数,它接收一个boost::system::error_code参数,用于检查定时器操作是否成功。如果ec为0,表示定时器正常到期,输出“Timer expired”。
    • main函数中,创建一个boost::asio::io_context对象io,它负责管理异步操作。
    • 接着创建一个boost::asio::steady_timer对象timer,绑定到io上下文,并设置5秒后到期。
    • 调用timer.async_wait(print),启动异步等待操作,当定时器到期时,会调用print回调函数。
    • 最后调用io.run(),启动io_context,开始处理异步事件,直到所有异步操作完成(这里就是定时器到期执行回调)。