【问题标题】:Make a Timer with boost::asio::deadline_timer用 boost::asio::deadline_timer 做一个定时器
【发布时间】:2019-12-19 15:56:31
【问题描述】:

我想用 boost::asio::deadline_timer 创建一个 Timer 类。我调查了这个: How do I make the boost/asio library repeat a timer?

    class DeadlineTimer
    {
        boost::asio::io_service io;
        std::function<void()> fun;
        boost::asio::deadline_timer t;
        void runTimer()
        {
            fun();
            t.expires_at(t.expires_at() + boost::posix_time::seconds(2));
            t.async_wait(boost::bind(&DeadlineTimer::runTimer, this));
        }
    public:
        DeadlineTimer() :t(io, boost::posix_time::seconds(2)){}
        void setFunction(std::function<void()> _f)
        {
            fun = _f;
        }
        void run()
        {
            io.run();
        }
    };

    void test()
    {
        DeadlineTimer timer1;
        auto f = []() {
            cout << "hello world\n";
        };
        timer1.setFunction(f);
        timer1.run();
    }

它允许用户通过timer1.setFunction(f); 传递一个自定义的定时器函数。然后重复运行它(在当前情况下每 2 秒运行一次)。

但它不起作用,根本没有输出。

【问题讨论】:

  • 你没有在这段代码的任何地方调用runTimer,那么你希望这个计时器如何启动?
  • 在分配了fun 之后,在setFunction 中添加runTimer()
  • @rafix07,哦,天哪,我才意识到。谢谢。
  • @rafix07,是的,效果很好,再次感谢。

标签: c++ c++11 boost


【解决方案1】:

经过反复试验,我成功地更新了 David Wyles 的 boost::asio::repeating_timer 类以使用 Boost >= 1.66 - 这巧妙地封装了重复计时器的功能。在线https://github.com/mikehaben69/boost,包括演示源和makefile。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多