¿Cómo terminar un hilo colgante dentro de una dll correctamente?

Hola a todos,

Tengo una biblioteca de terceros que contiene un error. Cuando llamo a una función puede colgarse. La función de biblioteca se llama dentro de una dll. Decidí pasar la llamada al hilo y esperar un tiempo. Si el hilo está terminado, entonces OK. Si no, debería terminarlo obligatoriamente.

El ejemplo simplificado aquí:

<code>unsigned Counter = 0;
void f()
{
    HANDLE hThread;
    unsigned threadID;

    // Create the second thread.
    hThread = (HANDLE)_beginthreadex( NULL, 0, DoSomething, NULL, 0, &threadID );

    if (WAIT_TIMEOUT == WaitForSingleObject( hThread, 5000 ))
    {
        TerminateThread(hThread, 1);    
        wcout << L"Process is Timed Out";
    }
    else
    {
        wcout << L"Process is Ended OK";
    }

    CloseHandle(hThread);   

    wcout << Counter;
}

unsigned int _stdcall DoSomething( void * /*dummy*/ )
{
    while (1)
    {

        ++Counter;

    }
    _endthreadex( 0 );
    return 0;
}
</code>

La pregunta

losTerminateThread () No se recomienda la función para llamar.Como mencioné antes, el hilo se está ejecutando.dentro de una dll. Si termino el hilo usandoTerminateThread () mi dll no descargaría usandoFreeLibrary () o inclusoFreeLibraryAndExitThread (). Ambas funciones cuelgan.

Cómo terminar el hilo y mantenerFreeLibrary () ¿trabajando?

Gracias.

Respuestas a la pregunta(1)

Su respuesta a la pregunta