c - interrumpir una llamada de función que se está ejecutando en un hilo

Tengo una DLL que contiene una función de subproceso cuyo pseudocódigo parece:

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();
}

Y en el código que usa esta DLL, la función de limpieza se ve así:

void cleanup()
{
    StopEverything();

    /* Wait for all threads to exit */
    /* Do other cleanup */
}

Mi pregunta es doble:

¿Hay una mejor manera de detener miworkerThreadFunc() ¿De ejecutar en lugar de hacer chequeos así en varios puntos de control?SuponerworkerThreadFunc() está atrapado dentrodoLaboriousTask2() cuando la aplicación principal llamaStopEverything(). Hay una manera deinterrumpir doLaboriousTask2() ¿Y que salga de inmediato?

¡Gracias!

Respuestas a la pregunta(1)

Su respuesta a la pregunta