C ++でタイムアウトを使用して非同期呼び出しを行いたい、つまり、そのようなsthを実現したい。
AsynchronousCall(function, time);
if(success)
//call finished succesfully
else
//function was not finished because of timeout
EDIT :関数は時間がかかるメソッドであり、時間がかかりすぎるときに中断したい。私はそれを達成する方法を探していましたが、それ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 で宣言されたプライベートメンバーにアクセスできないというエラーが発生しました。
たぶん、締め切りタイマーを使用するのはあまり良い考えではありませんか? 助けていただければ幸いです。非同期メソッドを呼び出すメソッド自体が非同期であるため、タイマーを関数に渡しています。したがって、クラス全体またはそのような sth に対して 1 つのタイマーを使用することはできません。