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() и он сразу выйдет?

Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос