我想在 C++ 中使用超时进行异步调用,这意味着我想实现这样的目标。
AsynchronousCall(function, time);
if(success)
//call finished succesfully
else
//function was not finished because of timeout
编辑:其中函数是一种需要大量时间的方法,我想在需要太多时间时中断它。我一直在寻找如何实现它,我认为这是可行boost::asio::deadline_timer
的方法。我想调用timer.async_wait(boost::bind(&A::fun, this, args))
是我需要的,但我不知道如何查找调用是成功还是由于超时而中止。
编辑:在 ForEveR 的回答之后,我的代码现在看起来像这样。
boost::asio::io_service service;
boost::asio::deadline_timer timer(service);
timer.expires_from_now(boost::posix_time::seconds(5));
timer.async_wait(boost::bind(&A::CheckTimer, this, boost::asio::placeholders::error));
boost::thread bt(&A::AsynchronousMethod, this, timer, args); //asynchronous launch
void A::CheckTimer(const boost::system::error_code& error)
{
if (error != boost::asio::error::operation_aborted)
{
cout<<"ok"<<endl;
}
// timer is cancelled.
else
{
cout<<"error"<<endl;
}
}
我想通过引用传递计时器并在异步方法结束时取消它,但是我收到一个错误,我无法访问在类 ::boost::asio::basic_io_object 中声明的私有成员。
也许使用截止日期计时器不是一个好主意?我真的很感激任何帮助。我将计时器传递给函数,因为调用异步方法的方法本身是异步的,因此我不能为整个类或类似的东西设置一个计时器。