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!