SleepEx功能使当前线程进入等待状态,直到出现以下情况之一:
*调用I / O完成回调函数
*异步过程调用(APC)排队等待线程。
*经过了超时间隔
DWORD SleepEx
DWORD 【dwMilliseconds】, | //超时间隔(以毫秒为单位) |
BOOL 【bAlertable】 | //提前完成标志 |
); |
参数
【dwMilliseconds】
指定延迟发生的时间(以毫秒为单位)。值为零会使函数立即返回。INFINITE的值导致无限延迟。
【bAlertable】
指定功能是否由于I / O完成回调函数或APC而提前终止。如果【bAlertable】为FALSE,则该函数在超时时间之前不会返回。如果发生I / O完成回调,则该函数不返回,并且不执行I / O完成功能。如果APC排队到线程,则该函数不返回,并且不执行APC功能。
如果【bAlertable】为TRUE,并且调用此函数的线程与调用扩展I / O功能(ReadFileEx或WriteFileEx)的线程相同,则当超时时间过去或当I / O完成回调功能发生。如果发生I / O完成回调,则调用I / O完成功能。如果APC排队到线程(QueueUserAPC),则当定时器输出期间过去或调用APC功能时,该函数返回。
返回值
如果指定的时间间隔到期,返回值为零。
如果由于一个或多个I / O完成回调函数而返回的函数返回值为WAIT_IO_COMPLETION。只有【bAlertable】为TRUE,并且调用SleepEx函数的线程与调用扩展I / O功能的线程相同时才会发生。
备注
该函数可以与ReadFileEx或WriteFileEx功能一起使用,以挂起线程,直到完成I / O操作。这些功能指定在完成I / O操作时要执行的完成例程。对于要执行的完成例程,当完成回调函数发生时,调用I / O功能的线程必须处于可警告的等待状态。通过调用SleepEx,MsgWaitForMultipleObjectsEx,WaitForSingleObjectEx或WaitForMultipleObjectsEx,将该函数的【bAlertable】参数设置为TRUE,线程进入可警告的等待状态。
一个线程可以通过调用这个函数来休息其余的时间片,睡眠时间为零毫秒。
使用SleepEx和DDE时必须小心。如果一个线程创建任何窗口,它必须处理消息。DDE向系统中的所有窗口发送消息。如果您的线程使用等待功能,没有超时间隔,系统将会死锁。因此,如果您有一个创建窗口的线程,请使用MsgWaitForMultipleObjects或MsgWaitForMultipleObjectsEx,而不是SleepEx.
也可以看看
MsgWaitForMultipleObjects, MsgWaitForMultipleObjectsEx, QueueUserAPC, ReadFileEx, 睡觉, WaitForMultipleObjectsEx, WaitForSingleObjectEx, WriteFileEx