关于WaitForMultipleObjects的一个有关问题,不等待直接向下执行
关于WaitForMultipleObjects的一个问题,不等待直接向下执行?
原程序是这样的:
HANDLE g_ahThreadExitEvent[3];
for (i = 0; i < 3; i++)
{
g_ahThreadExitEvent[i] = CreateEvent(NULL, TRUE, FALSE, NULL);
}
l_iReturn = ::WaitForMultipleObjects(1, &g_ahThreadExitEvent[0], TRUE, INFINITE);
for (i = 0; i < 2; i++)
{
::ResetEvent(g_ahThreadExitEvent[i]);
}
在一个线程结束的时候:
::SetEvent(g_ahThreadExitEvent[0]);
问题是,线程还没有去SetEvent,
WaitForMultipleObjects就已经返回了.
可是,如果我不用数组的话,又没有这个问题.
------解决方案--------------------
WaitForMultipleObjects退出之后的返回值是什么?
------解决方案--------------------
WaitForMultipleObjects函数的第一个参数应该是sizeof(g_ahThreadExitEvent)
在多线程处理的时候,你要清楚你要等待一个线程的事件完成,还是等待所有线程事件的完成。
上面的WaitForMultipleObjects(1, &g_ahThreadExitEvent[0], TRUE, INFINITE);的意思是等待g_ahThreadExitEvent[0]事件的信号
原程序是这样的:
HANDLE g_ahThreadExitEvent[3];
for (i = 0; i < 3; i++)
{
g_ahThreadExitEvent[i] = CreateEvent(NULL, TRUE, FALSE, NULL);
}
l_iReturn = ::WaitForMultipleObjects(1, &g_ahThreadExitEvent[0], TRUE, INFINITE);
for (i = 0; i < 2; i++)
{
::ResetEvent(g_ahThreadExitEvent[i]);
}
在一个线程结束的时候:
::SetEvent(g_ahThreadExitEvent[0]);
问题是,线程还没有去SetEvent,
WaitForMultipleObjects就已经返回了.
可是,如果我不用数组的话,又没有这个问题.
------解决方案--------------------
WaitForMultipleObjects退出之后的返回值是什么?
------解决方案--------------------
WaitForMultipleObjects函数的第一个参数应该是sizeof(g_ahThreadExitEvent)
在多线程处理的时候,你要清楚你要等待一个线程的事件完成,还是等待所有线程事件的完成。
上面的WaitForMultipleObjects(1, &g_ahThreadExitEvent[0], TRUE, INFINITE);的意思是等待g_ahThreadExitEvent[0]事件的信号