SleepEx
The SleepEx
function causes the current thread to enter a wait state until one of the following
occurs:
An I/O completion callback
function is called
An asynchronous procedure call
(APC) is queued to the thread.
The time-out interval elapses
DWORD SleepEx(
DWORD dwMilliseconds, |
// time-out
interval in milliseconds |
BOOL bAlertable |
// early completion
flag |
); |
|
Parameters
dwMilliseconds
Specifies the
time, in milliseconds, that the delay is to occur. A value of zero causes the
function to return immediately. A value of INFINITE causes an infinite delay.
bAlertable
Specifies
whether the function may terminate early due to an I/O completion callback
function or an APC. If bAlertable is FALSE, the function does not return
until the time-out period has elapsed. If an I/O completion callback occurs,
the function does not return and the I/O completion function is not executed.
If an APC is queued to the thread, the function does not return and the APC
function is not executed.
If bAlertable
is TRUE and the thread that called this function is the same thread that called
the extended I/O function (ReadFileEx12G2WEY), the function returns when either the
time-out period has elapsed or when an I/O completion callback function occurs.
If an I/O completion callback occurs, the I/O completion function is called. If
an APC is queued to the thread (QueueUserAPCKJA6PW), the function returns when either the
timer-out period has elapsed or when the APC function is called.
Return Values
The return
value is zero if the specified time interval expired.
The return
value is WAIT_IO_COMPLETION if the function returned due to one or more I/O completion
callback functions. This can happen only if bAlertable is TRUE, and if
the thread that called the SleepEx function is the same thread that
called the extended I/O function.
Remarks
This function
can be used with the ReadFileEx or WriteFileEx functions to
suspend a thread until an I/O operation has been completed. These functions
specify a completion routine that is to be executed when the I/O operation has
been completed. For the completion routine to be executed, the thread that
called the I/O function must be in an alertable wait state when the completion
callback function occurs. A thread goes into an alertable wait state by calling
either SleepEx, MsgWaitForMultipleObjectsEx
A thread can
relinquish the remainder of its time slice by calling this function with a
sleep time of zero milliseconds.
You have to
be careful when using SleepEx and DDE. If a thread creates any windows,
it must process messages. DDE sends messages to all windows in the system. If
you have a thread that uses a wait function with no time-out interval, the
system will deadlock. Therefore, if you have a thread that creates windows, use
MsgWaitForMultipleObjects or MsgWaitForMultipleObjectsEx, rather
than SleepEx.
See Also