我对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"; }
答案 0 :(得分:4)
如果您使用正确的回调函数类型,您似乎想要检查可以给回调的错误代码。看看:
你的回调应该看起来像这样:
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告诉绑定创建一个可以使用错误代码作为参数的函数。