1

私のプログラムでは、ブーストスレッドを開始し、ハンドラーをメインスレッドのメンバーとして保持します。ユーザーがキャンセルボタンを押すと、開始されたスレッドがまだ実行されていることを確認する必要があり、実行されている場合は、その特定のスレッドを強制終了する必要があります。これが擬似コードです。

不正行為のスレッド

int i =1;
boost::thread m_uploadThread = boost::thread(uploadFileThread,i);

これは、スレッドがまだ実行されているが、機能していないかどうかを確認するために使用するメソッドです。

boost::posix_time::time_duration timeout = boost::posix_time::milliseconds(2);
if (this->uploadThread.timed_join(timeout)){
 //Here it should kill the thread
}
4

2 に答える 2

4

戻り値trueは、呼び出しがタイムアウトする前にスレッドが完了したことを意味します。そして、あなたが望むものは

if(!this->uploadThread.timed_join(timeout))
于 2013-03-27T02:21:37.817 に答える
2

スレッドを停止するには、次を使用できます。

my_thread.interrupt();

これを機能させるには、割り込み時にスレッドの機能を停止させたいポイントに割り込みポイントを設定する必要があります。

注:それ自体による中断はスレッドを停止せず、フラグを設定するだけで、中断ポイントに達するとスレッドが中断されます。中断点が見つからない場合、スレッドは停止しません。

boost::thread_interruptedスレッドが中断されたかどうかに応じて処理できるように、中断された例外を処理することもできます。

たとえば、次のコードがスレッド関数内にあると仮定しましょう。

try
{
    //... some important code here
    boost::this_thread.interruption_poit(); // Setting interrutption point.
}
catch(boost::thread_interrupted&)
{
    // Now you do what ever you want to do when 
    // the thread is interrupted.
}
于 2014-07-14T16:01:45.273 に答える