Sleep和WaitForSingleObject,WaitForMultipleObjects
无效睡眠(DWORD毫秒);这个函数可以让线程暂停自己的运行,直到dw毫秒过去。
关于Sleep函数,有以下几个重要问题值得注意:
*调用Sleep可以让线程主动放弃自己剩余的时间片。
*系统将在指定的毫秒数内取消线程调度。
*可以调用Sleep并为dwMilliseconds参数传递INFINITE。这将告诉系统永远不要安排这个线程。这不是一件值得做的事。就是让线程退出,恢复它的栈和内核对象。
*可以通过0进入睡眠状态。这将告诉系统,调用线程将释放剩余的时间片,并强制系统调度另一个线程。但是,系统可以重新调度刚刚调用Sleep的线程。如果没有多个具有相同优先级的可调度线程,就会发生这种情况。
等待函数可以让线程自愿进入等待状态,直到某个特定的内核对象成为通知状态。这些等待函数中最常用的是WaitForSingleObject和WaitForMultipleObjects。
WaitForSingleObject函数:
DWORD WaitForSingleObject(handle h object,//等待核心对象
DWORD dw time out);//线程愿意等待的毫秒数(INFINITE表示无限等待)
返回值:
返回值定义含义
Wait _ object _ 0 0x0000000对象已到达信号状态
Wait _ time out 0x 00000102对象未在dwTimeout毫秒内到达信号状态
Wait _ discarded 0x 0000080对象是一个互斥体,由于被放弃而到达信号状态。
wait _ failed 0x ffffffff有错误。调用GetLastError获取扩展错误信息
waitformulipleobject函数:
DWORD waitformulipleobject(DWORD cobject,//检查核心对象的数量
LPHANDLE lpHandles,//这些对象的句柄数组
BOOL bWaitAll,//是否等待所有对象变为有信号
DWORD dw time out);//线程愿意等待的时间(以毫秒计)
返回值:
返回值定义含义
WAIT _ OBJECT _ 0 to
(WAIT _ OBJECT _ 0+cob objects-1)0x 00000000 Start当等待所有对象时,该值表示正在等待对象。在等待任何对象
时,该值给出lpHandles数组中属于该信号的对象的下标。
WAIT_TIMEOUT 0x00000102对象未在dwTimeout毫秒内达到信号状态。
WAIT _ abused _ 0到
(WAIT _ abused _ 0+cob objects-1)
在等待所有对象时从0x00000080开始,该值表示WAIT _ abused _ 0正在等待成功完成,并且至少有一个对象是互斥的。当等待任何对象时,该值给出lpHandles数组中属于被终止的互斥体的句柄的下标,该互斥体由于被放弃而终止。
wait _ failed 0x ffffffff中的错误。调用GetLastError以获取扩展的错误信息。
0条评论