INFINITE = 0xFFFFFFFF, то есть при гранулярности в миллисекунду соответствует интервалу в ~49,7 дней. В MSDN сказано, что "If dwMilliseconds is INFINITE, the function's time-out interval never elapses". И все-таки, будет ли ожидание действительно вечным, или все же не более 49,7 дней? Может быть более корректно писать while(WaitForSingleObject(handle, INFINITE) == WAIT_TIMEOUT); ?
Логично было бы предположить, что интервал действительно сделали вечным в порядке исключения для данного конкретного значния. Тут наверное реверсить системные функции надо. А к чему такая точность, если не секрет? Какого события ты собрался 50 дней ждать? ))
MSoft Логично предположить, что винапи и msdn полны косяков Да очень просто. Windows Service традиционно ждет евента на INFINITE, который сигналится по SERVICE_CONTROL_STOP. Получается если не сделать while, сервер будет останавливаться раз в 50 дней. Если вдруг получится так, что его никто за 50 дней не ребутнет, то для серьезного промышленного продукта это будет огромный косяк.
n0name уже сказал - вечным. Код (Text): PLARGE_INTEGER BaseFormatTimeOut( OUT PLARGE_INTEGER TimeOut, IN DWORD Milliseconds ) { if ( (LONG) Milliseconds == -1 ) { return( NULL ); } ... return Timeout; } Эта функция вызывается из Sleep(Ex) и WaitFor*** перед вызовом соотв. ZwApi. А передача NULL в качестве (PLARGE_INTEGER Timeout) делает ожидание вечным MSoft правильно угадал про конкретно данное значение)