Функция Спящего режима (synchapi.h)
Приостанавливает выполнение текущего потока до истечения времени ожидания.
Чтобы войти в состояние ожидания с оповещениями, используйте функцию SleepEx .
Синтаксис
void Sleep(
[in] DWORD dwMilliseconds
);
Параметры
[in] dwMilliseconds
Интервал времени, на который приостанавливается выполнение, в миллисекундах.
Нулевое значение приводит к тому, что поток откажется от оставшейся части своего среза времени любому другому потоку, готовому к выполнению. Если нет других потоков, готовых к выполнению, функция возвращается немедленно, и поток продолжит выполнение. Windows XP: Нулевое значение приводит к тому, что поток откажется от оставшейся части своего среза времени любому другому потоку с равным приоритетом, который готов к выполнению. Если нет других потоков с равным приоритетом, готовых к выполнению, функция возвращается немедленно, и поток продолжит выполнение. Это поведение изменилось начиная с Windows Server 2003.
Значение INFINITE указывает, что время ожидания приостановки не должно истекать.
Возвращаемое значение
None
Remarks
Эта функция приводит к тому, что поток откажется от оставшейся части своего среза времени и становится неисполнимым в течение интервала, основанного на значении dwMilliseconds. Системные часы "тикают" с постоянной скоростью. Если значение dwMilliseconds меньше разрешения системных часов, поток может в спящем режиме не превышать указанное время. Если значение dwMilliseconds больше одного галочки, но меньше двух, ожидание может быть в любом месте от одного до двух тактов и т. д. Чтобы повысить точность интервала спящего режима, вызовите функцию timeGetDevCaps , чтобы определить поддерживаемую минимальное разрешение таймера, и функцию timeBeginPeriod , чтобы задать минимальное разрешение таймера. Будьте осторожны при вызове timeBeginPeriod, так как частые вызовы могут значительно повлиять на системные часы, энергопотребление системы и планировщик. Если вы вызываете timeBeginPeriod, вызовите его один раз в начале приложения и обязательно вызовите функцию timeEndPeriod в самом конце приложения.
После прохождения интервала спящего режима поток готов к запуску. Если указать 0 миллисекунд, поток откажется от оставшейся части времени, но останется готовым. Обратите внимание, что готовый поток не гарантирует немедленного запуска. Следовательно, поток может выполняться только через некоторое время после истечения интервала спящего режима. Дополнительные сведения см. в разделе Приоритеты планирования.
Будьте внимательны при использовании спящего режима в следующих сценариях:
- Код, который прямо или косвенно создает окна (например, DDE и COM CoInitialize). Если поток создает какие-либо окна, он должен обрабатывать сообщения. Широковещательные сообщения отправляются во все окна в системе. Если у вас есть поток, использующий спящий режим с бесконечной задержкой, система будет взаимоблокировкой.
- Потоки, которые находятся под контролем параллелизма. Например, порт завершения ввода-вывода или пул потоков ограничивает количество связанных потоков, которые могут выполняться. Если максимальное количество потоков уже запущено, дополнительный связанный поток не может выполняться до завершения выполняющегося потока. Если поток использует спящий режим с нулевым интервалом, чтобы дождаться выполнения определенной работы одним из дополнительных связанных потоков, процесс может оказаться взаимоблокировкой.
Windows Phone 8.1. Эта функция поддерживается для приложений магазина Windows Phone в Windows Phone 8.1 и более поздних версий.
Windows 8.1 и Windows Server 2012 R2. Эта функция поддерживается для приложений Магазина Windows в Windows 8.1, Windows Server 2012 R2 и более поздних версий.
Примеры
Пример см. в разделе Использование локального хранилища потока.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2003 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | synchapi.h (включая Windows.h в Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2) |
Библиотека | Kernel32.lib; WindowsPhoneCore.lib на Windows Phone 8.1 |
DLL | Kernel32.dll; KernelBase.dll Windows Phone 8.1 |