c - прервать вызов функции, выполняющейся в потоке
У меня есть 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()
и он сразу выйдет?Спасибо!