函数WaitForMultipleObjects可以同时监测多个同步对象,该函数的声明为:
DWORD WaitForMultipleObjects(DWORD nCount, CONST HANDLE *lpHandles, BOOL bWaitAll, DWORD dwMilliseconds );
参数nCount是句柄数组中句柄的数目。lpHandles代表一个句柄数组。bWaitAll说明了等待类型,如果为TRUE,那么函数在所有对象都有信号后才返回,如果为FALSE,则只要有一个对象变成有信号的,函数就返回。参数dwMilliseconds是以毫秒为单位的超时间隔,如果该参数为0,那么函数就测试同步对象的状态并立即返回,如果该参数为INFINITE,则超时间隔是无限的。问题:如果将dwMilliseconds设为INFINITE,怎样在没有监测到结果的情况下,中断WaitForMultipleObjects的监测?
DWORD WaitForMultipleObjects(DWORD nCount, CONST HANDLE *lpHandles, BOOL bWaitAll, DWORD dwMilliseconds );
参数nCount是句柄数组中句柄的数目。lpHandles代表一个句柄数组。bWaitAll说明了等待类型,如果为TRUE,那么函数在所有对象都有信号后才返回,如果为FALSE,则只要有一个对象变成有信号的,函数就返回。参数dwMilliseconds是以毫秒为单位的超时间隔,如果该参数为0,那么函数就测试同步对象的状态并立即返回,如果该参数为INFINITE,则超时间隔是无限的。问题:如果将dwMilliseconds设为INFINITE,怎样在没有监测到结果的情况下,中断WaitForMultipleObjects的监测?
在加多个
>>对象变成有信号
来达到执行 WaitForMultipleObjects 到下一步,
要不然, 可能就要强制终止对应的线程了
这样
while (not WaitForMultipleObjects( ... ,1000) = MyOK)and ShouldBeContinue do ;
可以变通的实现的
if Wait <> WAIT_OBJECT_0+1 then // not overlapped i/o event - error occurred,
break; // or stop signaled加個 WAIT_OBJECT_0+1 就來判斷是不是要停止