如何终止等待对象的辅助线程

时间:2013-09-11 06:36:03

标签: c++ multithreading winapi

我使用_beginthreadex创建了一个辅助线程。当进程想要停止时。它必须终止两个线程。问题是辅助线程正在等待一些句柄(使用WaitForSingleObject)并且主线程想要终止辅助线程。

主线程如何通过WaitForSingleObject通知第二个线程停止然后终止?

1 个答案:

答案 0 :(得分:11)

添加用于停止线程的新事件:

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