新闻资讯
看你所看,想你所想

SleepEx

SleepEx

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

基本介绍

  • 中文名:暂无命名
  • 外文名:SleepEx
  • 套用学科:计算机科学
  • 适用领域範围:计算机科学
  • 适用领域範围:软体工程
  • 函式原型::DWORD WINAPI SleepEx
  • 返回值:当执行绪休眠逾时函式返回0
  • 参数说明:dwMilliseconds
  • 函式所属类型:c++

函式原型:

DWORD WINAPI SleepEx(DWORD dwMilliseconds,BOOL bAlertable);

说明:

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\n", GetLastError());
ExitProcess ( 1 );
}
SleepEx(INFINITE, TRUE);
}
printf("Exiting thread %d \n", GetCurrentThreadId());
ExitThread(0);
return 0;
}
VOID CALLBACK CompletionRoutine( //回调函式
DWORD errorcode,
DWORD bytesTransfered,
LPOVERLAPPED ov
)
{
fprintf(stdout, "Thread %d read: %d bytes\n",
GetCurrentThreadId(), bytesTransfered);
return;
}

转载请注明出处海之美文 » SleepEx

相关推荐

    声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:ailianmeng11@163.com