2012-05-20 1 views
2

Я использую функцию WaitForSingleObject() для выполнения ожидания в моей программе.wait для использования функции одного объекта

WaitForSingleObject(eventToBeSigaled, timeOut); 

Мы все знаем, что эта функция ожидает сообщения о событии в течение указанного количества времени.

Но я хочу знать, что произойдет, когда событие уже выделено перед входом в этот вызов, в то время это будет fail(WAIT_FAILED)? Пожалуйста, ответьте на это по уважительной причине. Я хочу знать это немного глубже.

ответ

2

Ответьте на свой первый вопрос: если событие уже сигнализировано, ваш Wait() вернется с немедленным возвратом WAIT_OBJECT_0.

Второй вопрос: Один из обстоятельств возвращается WAIT_FAILED, если дескриптор события закрыт, когда вызывается Wait(). В этом случае планировщик ОС не сможет обработать вызов Wait() и, следовательно, возвращает WAIT_FAILED.

Обратите внимание, что в конце дня функции Wait() являются средством для пользовательских потоков, чтобы передать CPU обратно в ОС до тех пор, пока не будет выполнено определенное условие. В зависимости от ваших потребностей вы используете один из примитивов ОС как условие (семафор, мьютекс, события и т. Д.). Планировщик ОС, в свою очередь, проверяет это условие, чтобы определить, должен ли ваш рабочий поток получать процессорный срез, тем самым гарантируя, что все потоки (и, следовательно, все процессы) получат справедливую долю системных ресурсов.

0

вы должны проверить это документация первых, link

Remarks

The WaitForSingleObject function checks the current state of the specified object. If the object's state is nonsignaled, the calling thread enters the wait state until the object is signaled or the time-out interval elapses.