Функция SleepEx


Функция SleepEx приостанавливает исполнение текущего потока до тех пор, пока не произойдет одно из ниже перечисленного:

Синтаксис

DWORD SleepEx(

DWORD dwMilliseconds, // интервал времени блокировки, в миллисекундах

BOOL bAlertable       // опция досрочного завершения

);

Параметры

dwMilliseconds

[in] Минимальное время интервала, в миллисекундах, на которое должна произойти приостановка исполнения кода.

Значение нуля заставляет поток оставить остаток своего кванта машинного времени любому другому потоку равного приоритета, который является готовым запуститься. Если других потоков равного приоритета, готовых запуститься нет, функция немедленно возвращает значение и поток продолжает исполнение кода.

Значение БЕСКОНЕЧНО (INFINITE) вызывает бесконечную задержку.

bAlertable

[in] Устанавливает, может ли функция завершить работу досрочно в результате окончания ввода-вывода функцией повторного вызова или APC. Если bAlertable имеет значение ЛОЖЬ (FALSE), функция не возвращает значения до тех пор, пока не истечет период времени блокировки. Если происходит обратный вызов завершения ввода-вывода, функция не возвращает значения, и завершение ввода-вывода функцией не выполняется. Если APC ставится в очередь потока, функция не возвращает значения, а функция APC не выполняется.

Если bAlertable имеет значение ИСТИНА (TRUE) и поток, который обратился к этой функции является тем же самым потоком, который вызвал расширенную функцию ввода-вывода (ReadFileEx или WriteFileEx), функция возвращает значение тогда, когда или истек период времени блокировки, или когда происходит окончание ввода-вывода функцией повторного вызова. Если происходит завершения ввода-вывода функцией обратного вызова, вызывается функция завершающая ввод-вывод. Если APC ставится в очередь потока (QueueUserAPC), функция возвращает значение тогда, когда или истек период блокировки по времени или когда вызывается функция APC.

Возвращаемые значения

Величина возвращаемого значения - ноль, если заданный интервал времени истек.

Величина возвращаемого значения является WAIT_IO_COMPLETION, если функция возвратила значение в результате одного или нескольких завершений ввода-вывода функцией повторного вызова. Это может случиться только в том случае, если bAlertable имеет значение ИСТИНА (TRUE), и если поток, который вызвал функцию SleepEx - тот же самый поток, который вызвал расширенную функцию ввода-вывода.

Замечания

Эта функция заставляет поток оставить остаток своего кванта машинного времени и стать не запускаемым, по меньшей мере, заданное число миллисекунд, по истечению которых поток становится готовым запуститься. В частности если Вы задаете нуль миллисекунд, поток оставит остаток своего кванта машинного времени, но останется готовым. 

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

Эта функция может быть использована с функциями ReadFileEx или WriteFileEx, чтобы приостановить работу потока до тех пор, пока не будет закончена операция ввода-вывода. Эти функции устанавливают процедуру завершения, которая должна быть выполнена, когда операция ввода-вывода заканчивается. Когда встречается функция повторного вызова завершения, для процедуры завершения, которая будет выполнена, поток, вызвавший функцию ввода-вывода, должен быть в настороженном состоянии ожидания. Поток входит в настороженное состояние ожидания путем вызова или SleepEx, MsgWaitForMultipleObjectsEx, WaitForSingleObjectEx, или WaitForMultipleObjectsEx, с параметром функции bAlertable установленным в значение ИСТИНА (TRUE).

Вы должны быть внимательными при использовании функции SleepEx и кода, который прямо или косвенно создает окно. Если поток создает какие-либо окна, он должен обрабатывать сообщения. Циркулярное сообщение отправляется всем окнам в системе. Если Вы имеете поток, который использует функцию SleepEx с бесконечной задержкой, система зайдет в тупик. Два примера кода, которые косвенно создают окна - это динамический обмен данными (DDE) и модель многокомпонентных объектов (COM) CoInitialize. Поэтому, если Вы имеете поток, который создает окна, используйте MsgWaitForMultipleObjects или MsgWaitForMultipleObjectsEx, а не SleepEx.

Смотри также

Краткий обзор Процессы и потоки, Функции, используемые процессами и потоками, MsgWaitForMultipleObjects, MsgWaitForMultipleObjectsEx, QueueUserAPC, ReadFileEx, Sleep, WaitForMultipleObjectsEx, WaitForSingleObjectEx, WriteFileEx

Размещение и совместимость SleepEx

Windows. NET Server

Да

Windows XP

Да

Windows 2000

Да

Windows NT

Да версии 3.1 и выше

Windows Me

Да

Windows 98

Да

Windows 95

Да

Используемая библиотека

Kernel32.lib

Заголовочный файл

 

- объявлено в

Winbase.h

- включено в

Windows.h

Unicode

Нет

Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz