我有一个具有多个线程的 MFC 代码,这些线程都使用不同的参数对子例程进行递归调用。在子程序的开头,我调用了函数 CheckKillEvent():
bool CTestShellDlg::CheckKillEvent()
{
DWORD waitS;
waitS = WaitForSingleObject(h_KillEvent, 0);
switch (waitS)
{
case WAIT_OBJECT_0:
return true;
break;
case WAIT_TIMEOUT:
return false;
break;
default:
IERROR
break;
}
}
如果 CheckKillEvent 返回 true,则立即 return()。
仅供参考,h_killEvent 初始化为:
h_KillEvent = CreateEvent(NULL, true, false, NULL);
即,它具有手动重置功能。
但是,在我将 Kill-event 设置如下后,这些线程似乎需要(字面上)永远完成:
bool CTestShellDlg::KillThreads()
{
//Signall the killing event
SetEvent(h_KillEvent);
if (WaitForMultipleObjects(,,true,)==...)
{
ResetEvent(h_KillEvent);
return true; //Killing successful
}
else
return false; //Killing failed
}
问题是,从多个线程调用 CheckKillEvent() 是否存在问题?WaitForSingleObject() 是否应该在关键部分内完成?或者仅仅是我的递归代码不擅长递归到它不再调用自己的点?