Отдает ли WaitForSingleObject временной отрезок потока? - PullRequest
5 голосов
/ 13 ноября 2010

Я делаю программу win32 на C.

Если у вас запущено несколько потоков, и один из потоков ожидает событие (например, с использованием WaitForSingleObject()), этот поток все еще получаетего полное время процессора?

Другими словами, знает ли операционная система, что поток не нуждается во временном интервале до тех пор, пока не будет сообщено одно из событий?

Ответы [ 2 ]

8 голосов
/ 13 ноября 2010

Да - поток блокируется, пока все, что он ожидает, не станет сигнальным. Поток не будет запланирован для запуска, пока он заблокирован, поэтому другие потоки получают все процессорное время.

Обратите внимание, что временные срезы не сильно в него входят. Поток может прекратить выполнение в середине временного интервала, и (например), если то, что он ожидает, быстро сигнализируется, он может начать выполняться снова до истечения своего исходного временного интервала. Когда что-то сигнализируется, ожидающий поток может сразу же проснуться , не обязательно ожидая окончания временного интервала (например, если ожидающий поток имеет более высокий приоритет, чем поток, который работал ).

2 голосов
/ 13 ноября 2010

Если объект, который вы ожидаете, еще не сигнализирован, поток выдаст остаток своего временного интервала и перейдет в спящий режим, пока объект не будет сигнализирован.

...