我有一个 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 */
}
我的问题是双重的:
- 有没有更好的方法来阻止我
workerThreadFunc()
执行而不是在各个检查点进行这样的检查? - 假设当主应用程序调用时
workerThreadFunc()
卡在里面。有没有办法中断并让它立即退出?doLaboriousTask2()
StopEverything()
doLaboriousTask2()
谢谢!