问题: WaitForMultipleObjects会丢失没有及时处理的信号。是这样的吗?
步骤:
1. 我创建两个waitable timer,用WaitForMultipleObjects来等待他们
2. while循环里面,信号到来的时候分别打印一条接受语句。这个没有问题。
3. 但是如果我在第一个timer接收到信号的时候,进入一个占用cpu100%的循环一段时间(一亿次计算),会发现,这个程序不能从Wait函数得到第二个Timer的响应了。只打印第一个timer的信息。这是为什么呢? 源代码如下:int main(void){
    HANDLE hTimer[2];
    hTimer[0]=CreateWaitableTimer(NULL,FALSE,"myTimer0");
    hTimer[1]=CreateWaitableTimer(NULL,FALSE,"myTimer1");
    LARGE_INTEGER liDueTime;
    liDueTime.QuadPart = -30000000;//3s,负数代表相对时间差,正数代表绝对时间点。首次通知时间
    if(!SetWaitableTimer( hTimer[0], &liDueTime, 2000, NULL, NULL, FALSE)){
        printf("fail 1\n");
    }
    if(!SetWaitableTimer( hTimer[1], &liDueTime, 5000, NULL, NULL, FALSE)){
        printf("fail 1\n");
    }
    while(1){
        DWORD ret=WaitForMultipleObjects(_countof(hTimer),hTimer,FALSE,INFINITE);
        printf("Signalled\n");
        if(ret==WAIT_OBJECT_0){
            printf("2s timer begin\n");
            for(unsigned i=0;i<1000000000;++i){
                float j=i*2.2f;
                float k=j+1;
            }
            printf("2s timer end\n");
        }
        else if(ret==WAIT_OBJECT_0+1){
            printf("5s timer begin\n");
        }
        else{
            printf("error!\n");
            return 1;
        }
    }
    return 0;
}
运行的结果是:
Signalled
2s timer begin
2s timer end
Signalled
2s timer begin
2s timer end
Signalled
2s timer begin
2s timer end
Signalled
2s timer begin
2s timer end如果我去掉for循环的那一段,那么
运行结果就是我期望的:
Signalled
2s timer begin
2s timer end
Signalled
5s timer begin
Signalled
2s timer begin
2s timer end
Signalled
2s timer begin
2s timer end
Signalled
5s timer begin
Signalled
2s timer begin
2s timer end高手指点一下!