疑似コードが次のようなスレッド関数を含む DLL があります。
volatile BOOL stopped = FALSE;
void StopEverything()
{
/* Enter critical section */
stopped = TRUE;
/* Leave critical section */
}
void workerThreadFunc()
{
Initialize();
/* Checkpoint 1 */
if(stopped)
{
/* Do cleanup */
return;
}
doLaboriousTask1();
/* Checkpoint 2 */
if(stopped)
{
/* Do cleanup */
return;
}
doLaboriousTask2();
Uninitialize();
}
この DLL を使用するコードでは、クリーンアップ関数は次のようになります。
void cleanup()
{
StopEverything();
/* Wait for all threads to exit */
/* Do other cleanup */
}
私の質問は 2 つあります。
workerThreadFunc()
さまざまなチェックポイントでそのようなチェックを行う代わりに、実行を停止するより良い方法はありますか?- メインアプリケーションが を呼び出したときに
workerThreadFunc()
がスタックしたとします。中断してすぐに終了させる方法はありますか?doLaboriousTask2()
StopEverything()
doLaboriousTask2()
ありがとう!