私の問題は本当にシンプルな解決策かもしれませんが、私は本当に私の周りのすべてのブーストに混乱しています。メイン操作をブロック/待機せずに新しいスレッドを開始
はここに私の問題だ:
私はCallbackReceived
関数を呼び出すコールバックシステムによって発生したタスク(計算、ファイルシステム操作など)を、開始したいと私はスレッドに、この操作を渡したいです、典型的にはオブジェクトのメンバ関数によって表される。スレッドは終了を保証されていないので、しばらくしてからスレッドをキャンセルする必要があります。以下のような
何か(これは100%正しいかどうかわからない):
// ...
MyObject object;
// ...
void CallbackReceived(int parameter) {
boost::thread tThread(&MyObject::calculate, *&object);
boost::asio::deadline_timer tDeadlineTimer(_ioService, boost::posix_time::seconds(2));
tDeadlineTimer.async_wait(boost::bind(DeadlineTimeOut, boost::asio::placeholders::error));
tThread.join();
}
基本的には、tThread.joinは() `スレッドの復帰を待ちます。待っている間、私のメインは、ブロックされて眠っているので、入ってくる可能性のあるコールバックを受け取ることができませんでした。
スレッドを実行し、操作を実行中に呼び出し元の初期プログラムをブロックしないようにするには、何ができますか?
... 'join'を呼び出しませんか? ':S' –
tThreadはtThread.join()のように使うポインタではないので、あなたのコードはあなたが実際に行っているものとは異なるもののようです。また、スレッドの終了を待機したくない場合は、joinをコールしないでください。多分未来はあなたのためのより良いツールですか? – PlasmaHH
@PlasmaHHヒントありがとう、私はそれを逃した。 – Benjamin