"重新加载"一个Boost Timer绑定到一个类方法

时间:2014-03-17 10:17:42

标签: c++ boost

我对asio计时器有些麻烦。 它绑定到类方法,当我重新加载计时器时(每次我等待数据或确认),调用回调方法(根据boost规范)。 问题是我不知道如何区分取消或完成计时器。 我该怎么办? 谢谢 !

const int TIMER_DURATION = 5000; // ms

tftp_connection::tftp_connection (std::string id,
                                  std::string file_name,
                                  connection_type_enum connection_type,
                                  tftp_server* server,
                                  boost::asio::io_service& io_service)
                : timer(io_service, boost::posix_time::milliseconds(TIMER_DURATION)) {
      //...

      // when sending a block and waiting for acknowledgement
        timer.expires_from_now(boost::posix_time::milliseconds(TIMER_DURATION));
        timer.async_wait(boost::bind(&tftp_connection::timeout_callback , this));

//...
void tftp_connection::timeout_callback() {
    std::cout << "Time Out\n"; }

1 个答案:

答案 0 :(得分:4)

如果您使用正确的回调函数类型,您似乎想要检查可以给回调的错误代码。看看:

Boost async_wait example

你的回调应该看起来像这样:

void tftp_connection::timeout_callback(const boost::system::error_code& e) {
    if(e.value() == ERROR_TIMEOUT) // Or whatever error code you want to check for.
    {
         std::cout << "Time Out\n";
    }
}

此外,您需要将绑定更改为:

 timer.async_wait(boost::bind(&tftp_connection::timeout_callback , this,boost::asio::placeholders::error));

boost :: asio :: placeholders :: error告诉绑定创建一个可以使用错误代码作为参数的函数。