我使用创建了一个辅助线程_beginthreadex
。当进程想要停止时。它必须终止两个线程。问题是辅助线程正在等待某个句柄(使用WaitForSingleObject
),而主线程想要终止辅助线程。
主线程如何通知第二个线程停止WaitForSingleObject
然后终止?
我使用创建了一个辅助线程_beginthreadex
。当进程想要停止时。它必须终止两个线程。问题是辅助线程正在等待某个句柄(使用WaitForSingleObject
),而主线程想要终止辅助线程。
主线程如何通知第二个线程停止WaitForSingleObject
然后终止?
添加用于停止线程的新事件:
HANDLE hStopEvent;
hStopEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
停止另一个线程:
SetEvent(hStopEvent); // ask thread to stop
WaitForSingleObject(hThread, INFINITE); // wait when thread stops
在线程代码中,替换WaitForSingleObject
为WaitForMultipleObjects
. 等待退出事件 + hStopEvent
。当hStopEvent
发出信号时,退出线程函数。
HANDLE hEvents[2];
hEvents[0] = <your existing event>;
hEvents[1] = hStopEvent;
for(;;) // event handling loop
{
DWORD dw = WaitForMultipleObjects(2, hEvents, FALSE, INFINITE);
if ( dw == WAIT_OBJECT_0 )
{
// your current event handling code goes here
// ...
}
else if ( dw == WAIT_OBJECT_0 + 1 )
{
// stop event is set, exit the loop and thread function
break;
}
}