正确的方法是使用 CreateEvent 创建一个事件“杀死我”,然后在您希望杀死线程时标记此事件。与其让你的线程等待while(1)
,不如让它等待while(WaitForSingleObject(hevent_killme, 0))
。然后你可以简单地让线程回调完成并返回,不需要调用 _endthreadex 之类的。
回调函数示例:
static DWORD WINAPI thread_callback (LPVOID param)
{
...
while(WaitForSingleObject(hevent_killme, 0) != WAIT_OBJECT_0)
{
// do stuff
}
return 0;
}
呼叫者:
HANDLE hevent_killme = CreateEvent(...);
...
void killthread (void)
{
SetEvent(hevent_killme);
WaitForSingleObject(hthread_the_thread, INFINITE);
CloseHandle(hevent_killme);
CloseHandle(hthread_the_thread);
}
永远不要使用 TerminateThread。