gpt4 book ai didi

c++ - 具有取消处理的 async_wait 处理程序类成员

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:07:15 27 4
gpt4 key购买 nike

这很好用:

class cStartSequence
{
void Tick()
{
// do something
}
void Wait()
{
myTimer->expires_from_now(
boost::posix_time::seconds( mySecs ) );
myTimer->async_wait(boost::bind(
&cStartSequence::Tick,
this
));
}
...
};

我希望能够取消计时器并让处理程序做一些不同的事情

void Tick( boost::system::error_code & ec )
{
if( ! ec )
// do something
else
// do something different
}

问题是如何修改对async_wait的调用?

这不编译

myTimer->async_wait(boost::bind(
&cStartSequence::Tick,
this,
boost::asio::placeholders::error
));

编译器投诉:

C:\Users\James\code\boost\v1_63\boost\bind\bind.hpp|319|error:
no match for call to
'(boost::_mfi::mf1<void, pinmed::wrs::cStartSequence, boost::system::error_code&>)
(pinmed::wrs::cStartSequence*&, const boost::system::error_code&)'

我尝试了 async_wait 参数的一些变体,但没有成功。

boost:asio v1.63,windows 10,code::blocks v16.01

最佳答案

您的 Tick 方法采用非常量引用。那不行(并且不满足处理程序要求)。使用任一个

void Tick(boost::system::error_code const& ec);

或者也许

void Tick(boost::system::error_code ec);

第一个是 Asio 作者的首选,因为有点晦涩难懂的原因(特定于库的优化 IIRC)

附言。要安全取消截止时间计时器,另请参阅

关于c++ - 具有取消处理的 async_wait 处理程序类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47518509/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com