重用 Boost 的计时器对象

Re-using Boost's timer objects

本文关键字:对象 计时器 Boost 重用      更新时间:2023-10-16

我在此处从Boost的计时器2教程中修改代码 定期打印输出:

#include <boost/date_time/posix_time/posix_time.hpp>
void print(const boost::system::error_code& /*e*/)
{
    static int i = 0;
    i++;
    std::cout << i << std::endl;
}
int main()
{
    while(1)
    {
        boost::asio::io_context io;
        boost::asio::deadline_timer t(io, boost::posix_time::seconds(1));
        t.async_wait(&print);
        t.wait();
        io.run();
    }
}

我没有得到的是,如果我在(1(之外使用前两条线,它将无法正常工作。有没有办法创建这些对象并重复使用它们?谢谢。

您需要使用

安排下一个计时器事件
  • expires_at http://www.boost.org/doc/libs/1_66_0/doc/html/boost_asio/reference/reference/basic_deadeadline_timer/expires_at.at.at.at.ht.html
  • expires_from_now http://www.boost.org/doc/libs/1_66_0/doc/doc/html/boost_asio/reference/reference/basic_deadeadline_timer/expires_from_now.now.html

所以,喜欢:

#include <boost/asio.hpp>
#include <iostream>
void print(boost::system::error_code ec) {
    static int i = 0;
    if (ec != boost::asio::error::operation_aborted) {
        i++;
    }
    std::cout << i << " (" << ec.message() << ")" << std::endl;
}
int main() {
    boost::asio::io_service io;
    boost::asio::deadline_timer t(io);
    while (1) {
        t.expires_from_now(boost::posix_time::seconds(1));
        t.async_wait(&print);
        if (io.stopped()) { io.reset(); }
        io.run();
    }
}

好吧,该部分显然在计时器3教程中。另外,1.66的文档缺少信息。要将其更改为1.65。