Wie beendet man einen hängenden Thread in einer DLL richtig?

Hallo allerseits,

Ich habe eine Drittanbieter-Bibliothek, die einen Fehler enthält. Wenn ich eine Funktion aufrufe, kann sie hängen bleiben. Die Bibliotheksfunktion wird in einer DLL aufgerufen. Ich beschloss, den Anruf in den Thread zu verschieben und einige Zeit zu warten. Wenn der Thread fertig ist, dann OK. Wenn nicht - ich sollte es zwingend kündigen.

Das vereinfachte Beispiel hier:

<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>

Die Frage

DasTerminateThread () Funktion wird nicht empfohlen, anzurufen.Wie ich bereits erwähnt habe, läuft der Threadin einer dll. Wenn ich den Thread mit beendeTerminateThread () meine dll würde nicht mit entladenFreeLibrary () oder auchFreeLibraryAndExitThread (). Beide Funktionen hängen.

So beenden Sie den Thread und behaltenFreeLibrary () Arbeiten?

Vielen Dank.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage