如何使用超时进行异步调用 我想用超时在C++中做异步调用,意思是我想达到这样的目的。 AsynchronousCall(function, time); if(success) //call finished succesfully else //function was not finished because of timeout

如何使用超时进行异步调用 我想用超时在C++中做异步调用,意思是我想达到这样的目的。 AsynchronousCall(function, time); if(success) //call finished succesfully else //function was not finished because of timeout,c++,asynchronous,timeout,boost-asio,C++,Asynchronous,Timeout,Boost Asio,编辑:其中函数是一个需要很多时间的方法,当它需要太多时间时,我想中断它。 我一直在寻找如何实现这一目标,我认为我要走的路是。我想调用timer.async_wait(boost::bind(&A::fun,this,args))是我所需要的,但我不知道如何找到调用是否成功或是否由于超时而中止 编辑:在永远的答案之后,我的代码现在看起来像这样 boost::asio::io_service service; boost::asio::deadline_timer timer(service

编辑:其中函数是一个需要很多时间的方法,当它需要太多时间时,我想中断它。 我一直在寻找如何实现这一目标,我认为我要走的路是。我想调用
timer.async_wait(boost::bind(&A::fun,this,args))
是我所需要的,但我不知道如何找到调用是否成功或是否由于超时而中止

编辑:在永远的答案之后,我的代码现在看起来像这样

    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::io\u服务;
boost::asio::截止时间计时器(服务);
timer.expires_from_now(boost::posix_time::seconds(5));
async_wait(boost::bind(&A::CheckTimer,this,boost::asio::placeholders::error));
boost::thread bt(&A::AsynchronousMethod,this,timer,args)//异步启动
void A::CheckTimer(const boost::system::error\u代码和错误)
{
if(error!=boost::asio::error::operation\u中止)
{
不能你应该使用


我包括boost/asio/placeholders.hpp,但我仍然找不到boost::asio::placeholders::error:“
fun
函数的主要工作应该在函数的开头?@cygi1989 ehm…fun只是计时器回调。它做什么工作,不管有什么错误?如果找不到placeholders::error,试着简单地使用_1。好的,因此,可能是我误解了deadline_timer的用法。我想异步调用函数a::fun。这个函数做了很多工作,如果它花费太多时间,我想中断这个函数。@cygi1989设置计时器,然后异步调用这个函数。在执行函数后(可能在函数末尾)调用
timer.cancel()
,然后处理程序将执行
operation\u aborted
信号,如果超时发生,处理程序将执行
success
。但是,
boost::asio
不是用于异步工作,而是用于一些internet工作。我编辑了这个问题,但仍然不知道它应该如何工作。
timer.async_wait(boost::bind(
&A::fun, this, boost::asio::placeholders::error));

A::fun(const boost::system::error_code& error)
{
   // timeout, or some other shit happens
   if (error != boost::asio::error::operation_aborted)
   {
   }
   // timer is cancelled.
   else
   {
   }
}