升压计时器立即到期

时间:2015-06-22 11:39:12

标签: c++ boost

我运行提升deadline_timer并执行async_wait,但计时器立即取消。我做错了什么?我在主文件中运行ioService。

感谢您提供任何可能的帮助

class A(boost::asio:io_service& ioService):
m_timer(ioService) 
{ 
    m_timer.expires_at(boost::posix_time::pos_infin);
    m_timer.async_wait([this](const boost::system::error_code& ec)
     {
       std::cout << "Timer callback " << ec.message() << std::endl; 
     });

1 个答案:

答案 0 :(得分:2)

检查A对象的生命周期。

E.g。如果你这样做:

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

struct A {
    A(boost::asio::io_service& ioService) : m_timer(ioService)
    {
        m_timer.expires_at(boost::posix_time::pos_infin);
        m_timer.async_wait(
            [this](const boost::system::error_code& ec) { std::cout << "Timer callback " << ec.message() << std::endl; }
        );
    }
    boost::asio::deadline_timer m_timer;
};

int main()
{
    boost::asio::io_service svc;
    {
        A a(svc);
    }
    svc.run();
}

即使在调用run()之前,计时器也会被取消。

以下将按预期执行

int main()
{
    boost::asio::io_service svc;
    {
        A a(svc);
        svc.run();
    } // A destructed after `run()` completes
}