2015-06-22 39 views
1

我運行升壓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; 
    }); 
+0

顯示什麼信息? – sehe

+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 
}