안녕 모두들,dll에서 교수형 스레드를 올바르게 종료하는 방법은 무엇입니까?
나는 오류가 포함 된 타사 라이브러리가 있습니다. 함수를 호출하면 멈출 수 있습니다. 라이브러리 함수는 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를() 함수를 호출하지 않는 것이 좋습니다.
- 앞서 언급했듯이이 스레드는 안에 으로 실행됩니다. TerminateThread()을 사용하여 스레드를 종료하는 경우 FreeLibrary() 또는 FreeLibraryAndExitThread()을 사용하여 내 dll을 언로드하지 않았습니다. 두 기능이 정지합니다.
스레드를 종료하고 유지하는 방법 FreeLibrary()이 작동합니까?
감사합니다.
아마도 당신은 별도의 프로세스에서 루즈 dll 호스팅을 살펴보고 물건이 배 모양이되면 프로세스를 죽이는 것이 좋을까요? –