Sleep和WaitForSingleObject ,WaitForMultipleObjects
2008-09-26 16:12
826 查看
VOID Sleep(DWORD dwMilliseconds);
该函数可使线程暂停自己的运行,直到dwMilliseconds过去为止。
关于Sleep函数,有下面几个重要问题值得注意:
* 调用Sleep,可使线程自愿放弃它剩余的时间片。
* 系统将在大约的指定毫秒数内使线程不可调度。
* 你可以调用Sleep,并且为dwMilliseconds参数传递INFINITE。这将告诉系统永远不要调度该线程。这不是一件值得去做的事情。最好是让线程退出,并还原它的堆栈和内核对象。
* 你可以将0传递给Sleep。这将告诉系统,调用线程将释放剩余的时间片,并迫使系统调度另一个线程。但是,系统可以对刚刚调用Sleep的线程重新调度。如果不存在多个拥有相同优先级的可调度线程,就会出现这种情况。
等待函数可使线程自愿进入等待状态,直到一个特定的内核对象变为已通知状态为止。这些等待函数中最常用的是WaitForSingleObject 和WaitForMultipleObjects。
WaitForSingleObject函数:
DWORD WaitForSingleObject(HANDLE hObject, // 等待的核心对象
DWORD dwTimeout ) ; // 线程愿意等待的毫秒数(值为INFINITE时表示无限等待)
返回值:
返回值 定义 含义
WAIT_OBJECT_0 0x00000000 对象达到有信号
WAIT_TIMEOUT 0x00000102 对象没有在dwTimeout毫秒内 到达有信号状态
WAIT_ABANDONED 0x00000080 对象是一个互斥量,由于它被放弃了而达到有信号状态
WAIT_FAILED 0xFFFFFFFF 发生错误。调用GetLastError以取得扩展的错误信息
WaitForMultipleObject函数:
DWORD WaitForMultipleObject(DWORD cObject, // 检查核心对象的数目
LPHANDLE lpHandles, // 指向这些对象的句柄的数组
BOOL bWaitAll, // 是否等待所有对象变成有信号
DWORD dwTimeout); // 线程愿意等待的时间(毫秒数)
返回值:
返回值 定义 含义
WAIT_OBJECT_0到
(WAIT_OBJECT_0+cObjects-1) 0x00000000 开始当等待所有对象时,这一值表明等待对象成功的完成了。当等待任一对象
时,这一值给出 lpHandles数组中属于变成有信号的对象的下标。
WAIT_TIMEOUT 0x00000102 对象或对象们没有在dwTimeout毫秒内达到有信号状态。
WAIT_ABANDONED_0到
(WAIT_ABANDONED_0+cObjects-1)
开始于0x00000080 当等待所有对象时,这一值指明WAIT_ABANDONED_0等待成功的完成,并且至少有一个对象是互斥量,此互斥量是由于被放弃而达到有信号的。当等待任一对象时,这一值给出lpHandles数组中属于变得有信号的互斥量的句柄的下标,此互斥量由于被放弃而达到有信号。
WAIT_FAILED 0xFFFFFFFF 发生错误。 调用GetLastError以取得扩展的 错误信息
该函数可使线程暂停自己的运行,直到dwMilliseconds过去为止。
关于Sleep函数,有下面几个重要问题值得注意:
* 调用Sleep,可使线程自愿放弃它剩余的时间片。
* 系统将在大约的指定毫秒数内使线程不可调度。
* 你可以调用Sleep,并且为dwMilliseconds参数传递INFINITE。这将告诉系统永远不要调度该线程。这不是一件值得去做的事情。最好是让线程退出,并还原它的堆栈和内核对象。
* 你可以将0传递给Sleep。这将告诉系统,调用线程将释放剩余的时间片,并迫使系统调度另一个线程。但是,系统可以对刚刚调用Sleep的线程重新调度。如果不存在多个拥有相同优先级的可调度线程,就会出现这种情况。
等待函数可使线程自愿进入等待状态,直到一个特定的内核对象变为已通知状态为止。这些等待函数中最常用的是WaitForSingleObject 和WaitForMultipleObjects。
WaitForSingleObject函数:
DWORD WaitForSingleObject(HANDLE hObject, // 等待的核心对象
DWORD dwTimeout ) ; // 线程愿意等待的毫秒数(值为INFINITE时表示无限等待)
返回值:
返回值 定义 含义
WAIT_OBJECT_0 0x00000000 对象达到有信号
WAIT_TIMEOUT 0x00000102 对象没有在dwTimeout毫秒内 到达有信号状态
WAIT_ABANDONED 0x00000080 对象是一个互斥量,由于它被放弃了而达到有信号状态
WAIT_FAILED 0xFFFFFFFF 发生错误。调用GetLastError以取得扩展的错误信息
WaitForMultipleObject函数:
DWORD WaitForMultipleObject(DWORD cObject, // 检查核心对象的数目
LPHANDLE lpHandles, // 指向这些对象的句柄的数组
BOOL bWaitAll, // 是否等待所有对象变成有信号
DWORD dwTimeout); // 线程愿意等待的时间(毫秒数)
返回值:
返回值 定义 含义
WAIT_OBJECT_0到
(WAIT_OBJECT_0+cObjects-1) 0x00000000 开始当等待所有对象时,这一值表明等待对象成功的完成了。当等待任一对象
时,这一值给出 lpHandles数组中属于变成有信号的对象的下标。
WAIT_TIMEOUT 0x00000102 对象或对象们没有在dwTimeout毫秒内达到有信号状态。
WAIT_ABANDONED_0到
(WAIT_ABANDONED_0+cObjects-1)
开始于0x00000080 当等待所有对象时,这一值指明WAIT_ABANDONED_0等待成功的完成,并且至少有一个对象是互斥量,此互斥量是由于被放弃而达到有信号的。当等待任一对象时,这一值给出lpHandles数组中属于变得有信号的互斥量的句柄的下标,此互斥量由于被放弃而达到有信号。
WAIT_FAILED 0xFFFFFFFF 发生错误。 调用GetLastError以取得扩展的 错误信息
相关文章推荐
- 在界面线程不能使用Sleep和WaitForSingleObject之类的函数, 使用 MsgWaitForMultipleObjects
- Sleep和WaitForSingleObject ,WaitForMultipleObjects
- 在界面线程不能使用Sleep和WaitForSingleObject之类的函数, 使用 MsgWaitForMultipleObjects
- FW:在主线程中慎用WaitForSingleObject (WaitForMultipleObjects)
- 在主线程中慎用WaitForSingleObject (WaitForMultipleObjects)
- WaitForSingleObject和WaitForMultipleObjects用法
- 主线程里面使用WaitForSingleObject (WaitForMultipleObjects)需要考虑的情况(转)
- 学习笔记 -- Win32多线程程序设计(二) WaitForSingleObject and WaitForMultipleObjects
- 在主线程中慎用WaitForSingleObject (WaitForMultipleObjects)
- WaitForSingleObject与WaitForMultipleObjects用法详解
- 在主线程中慎用WaitForSingleObject (WaitForMultipleObjects)
- WaitForSingleObject和WaitForMultipleObjects
- 在主线程中慎用WaitForSingleObject (WaitForMultipleObjects)
- 在主线程中慎用WaitForSingleObject (WaitForMultipleObjects) --代替方法:MsgWaitForMultipleObjects
- WaitForSingleObject和MsgWaitForMultipleObjects
- WaitForSingleObject、WaitForMultipleObjects、CreateThread .
- 串口 WaitForSingleObject 和 WaitForMultipleObjects函数
- WaitForSingleObject 和 WaitForMultipleObjects
- WaitForSingleObject与WaitForMultipleObjects用法详解
- 在主线程中慎用WaitForSingleObject (WaitForMultipleObjects)