Будет ли WaitForSingleObject вызывать переключение контекста при ожидании с нулевым временем ожидания? - PullRequest
8 голосов
/ 17 ноября 2010

Будет ли WaitForSingleObject (или WaitForMultipleObjects) вызывать переключение контекста при ожидании события с нулевым временем ожидания?(Насколько я знаю, Sleep(0) сразу выдаст временной отрезок потока).

Теперь, что касается WaitForSingle|MultipleObject и дескрипторов событий.Если WaitFor * Object действительно нужно ждать, он, очевидно, выдаст остаток своего временного интервала.Однако в двух случаях API не нужно ждать:

  • Любое событие сигнализируется, и в этом случае оно может вернуться с WAIT_OBJECT_0
  • Или состояние события не имеет значения, так как я указал нулевое время ожидания, и в этом случае оно может немедленно вернуться, либо с помощью WAIT_OBJECT_0 или WAIT_TIMEOUT

Теперь, учитываяэто, WaitForSingleObject вызовет переключение контекста потока, если задано нулевое время ожидания?

Ответы [ 2 ]

4 голосов
/ 17 ноября 2010

На основании ядра исследования Windows и некоторого простого обратного инжиниринга KeWaitForSingleObject ответ - нет . Глядя на WRK, время выполнения внутреннего таймера проверяется перед вызовом KiSwapThread, что гарантирует немедленное возвращение функции, если объект не сигнализирован.

4 голосов
/ 17 ноября 2010

Теперь, кажется, я вроде нашел ответ, когда писал вопрос - вот что я предполагаю из доступных документов:

MSDN гласит следующее:

dwMilliseconds [in]

Интервал времени ожидания в миллисекундах. Если ненулевое значение указано, функция ждет до указанные объекты сигнализируются или интервал истекает. Если dwMilliseconds равно нулю, функция не переходит в состояние ожидания, если указанные объекты не сигнализируются ; Это всегда возвращается немедленно. Если dwMilliseconds является бесконечным, функция вернется только тогда, когда указанные объекты сигнализируются.

Я бы взял это, чтобы подразумевать, что также не входит в состояние ожидания, если объектам сообщается , и я бы интерпретировал: " не входит в состояние ожидания"как" переключение контекста не происходит ".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...