请输入您要查询的百科知识:

 

词条 SleepEx
释义

函数原型:

DWORD WINAPI SleepEx(DWORD dwMilliseconds,BOOL bAlertable);

说明:

SleepEx函数中止当前线程运行直到指定的条件被触发。当以下任意一点出现时,当前线程将恢复运行。

I/O回调函数被调用

Asynchronous Procedure Call(APC)异步函数被插入线程

当前线程休眠时间超过最小超时值

参数说明:

dwMilliseconds

单位毫秒,线程休眠的时间。

如果该值设为0,当前线程将放弃它剩余的执行时间片,被将时间片平均分给与它同等级的其它线程。如果当前进程没有与它同等级的线程运行,该函数SleepEx立即返回,线程继续执行。

如果INFINITE值被指定,当前线程的休眠不会超时。

bAlertable

如果该参数为FALSE,函数不会返回直到超时已到。如果一个I/O回调函数出现,该函数也不会返回而且回调函数也不会执行。如果一个APC函数插入线程,该函数不会返回而且APC函数也不会执行。

如果该参数为TRUE而且SleepEx与扩展I/O函数(ReadFileEx or WriteFileEx)是在同一个线程,函数就会立即返回当线程休眠超时或I/O回调函数出现。如果I/O回调函数出现,那么I/O回调函数会被调用。如果APC被插入线程,该函数不论当前线程是否超时都会立即执行,而且APC函数也会被调用。

返回值:

当线程休眠超时函数返回0。

如果函数返是由于I/O回调函数导致,那么返回值是WAIT_IO_COMPLETION,这只会出现在当bAlertable设置TRUE时的情况。

示例:

DWORD WINAPI Reader(PVOID dummy) //线程

{

ULONG data;

OVERLAPPED ov;

while(!ExitFlag)

{

ZeroMemory( &ov, sizeof(ov) );

ov.Offset = 0;

ov.OffsetHigh = 0;

if(!ReadFileEx(hDevice, (PVOID)&data, sizeof(ULONG), &ov, CompletionRoutine))

{

printf ( "Error: Read Failed: %d\", GetLastError());

ExitProcess ( 1 );

}

SleepEx(INFINITE, TRUE);

}

printf("Exiting thread %d \", GetCurrentThreadId());

ExitThread(0);

return 0;

}

VOID CALLBACK CompletionRoutine( //回调函数

DWORD errorcode,

DWORD bytesTransfered,

LPOVERLAPPED ov

)

{

fprintf(stdout, "Thread %d read: %d bytes\",

GetCurrentThreadId(), bytesTransfered);

return;

}

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/1/11 9:13:28