大家好,
我有一个包含一个错误第三方库。 当我调用一个函数它可能会挂起。 库函数调用一个dll内。 我决定把呼叫转移到线程并等待一段时间。 如果线程完成,然后确定。 如果没有 - 我应该终止其义务。
该简化的例子在这里:
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;
}
问题
- 不建议调用TerminateThread()函数。
- 正如我前面提到的,线程是一个DLL中运行。 如果我使用TerminateThread终止线程()我的DLL不会卸载使用FreeLibrary则(),甚至的FreeLibraryAndExitThread()。 这两个函数挂起。
如何终止线程并保持FreeLibrary则()工作?
谢谢。