C++多线程(五)
来源:互联网 发布:天空左岸java 编辑:程序博客网 时间:2024/05/22 00:55
多线程之等待函数
一 等待函数
1)函数列举
2)简单说明WaitForSingleObject
DWORD WaitForSingleObject(HANDLE hObject,DWORD dwMilliseconds);
参数hObject:要等待的内核对象的句柄。
参数dwMilliseconds: 设置的等待超时的时间,以毫秒为单位。可以设置为INGINIT。
顺便说一下,INFINITE已经定义为0xFFFFFFFF(或-1)。当然,传递INFINITE有些危险。如果对象永远不变为已
通知状态,那么调用线程永远不会被唤醒,它将永远处于死锁状态。
返回值:WAIT_OBJECT_0表示要等待的对象已经变为已通知的状态。
WAIT_TIMEOUT表示设置的时间超时。
WAIT_FAILED表示失败,可能是传入的handle不正确或其他的问题。
switch(dw)
{
case WAIT_OBJECT_0:
// The process terminated.
break;
case WAIT_TIMEOUT:
// The process did not terminate within 5000 milliseconds.
break;
case WAIT_FAILED:
// Bad call to function (invalid handle?)
break;
}
3)简单说明WaitForMultipleObjects
DWORD WaitForMultipleObjects(DWORD dwCount,CONST HANDLE* phObjects,BOOL fWaitAll,DWORD dwMilliseconds);
参数dwCout:需要等待的内核对象的数量。
参数phObjects:需要等待的内核对象的是数组的指针。
参数fWaitAll:表示是否需要等待所有的内核对象。
参数dwMilliseconds:设置等待超时的时间。(同上函数)
返回值:WAIT_FAILED和WAIT_TIMEOUT同上函数。
如果为fWaitAll参数传递TRUE,同时所有对象均变为已通知状态,那么返回值是WAIT_OBJECT_0。如果为fWaitAll传递FALSE ,那么一旦任何一个对象变为已通知状态,该函数便返回。在这种情况下,你可能想要知道哪个对象变为已通知状态。返回值是WAIT_OBJECT_0与(WAIT_OBJECT_0+dwCount- 1)之间的一个值。
h[0]= hProcess1;
h[1]= hProcess2;
h[2]= hProcess3;
DWORD dw= WaitForMultipleObjects(3, h, FALSE,5000);
switch(dw)
{
case WAIT_FAILED:
// Bad call to function (invalid handle?)
break;
case WAIT_TIMEOUT:
// None of the objects became signaled within 5000 milliseconds.
break;
case WAIT_OBJECT_0+ 0:
// The process identified by h[0] (hProcess1) terminated.
break;
case WAIT_OBJECT_0+ 1:
// The process identified by h[1] (hProcess2) terminated.
break;
case WAIT_OBJECT_0+ 2:
// The process identified by h[2] (hProcess3) terminated.
break;
}
- c/c++: 多线程编程基础讲解(五)
- c/c++: 多线程编程基础讲解(五)
- linux下C语言多线程(五)杂项函数
- C++:多线程类库的设计与实现(五)
- linux下C语言多线程(五)杂项函数
- C++多线程(五)
- C++多线程(五)
- C++多线程(五)
- 浅谈-----多线程(五)
- C++多线程(五)
- C#多线程(五)
- 多线程初探(五)
- 多线程入门(五)
- 《CLR via C#》读书笔记-.NET多线程(五)
- [C#] C#多线程学习(五) 多线程的自动管理(定时器)
- 多线程入门教程(五)MFC的多线程
- Java 多线程(五) 多线程的同步
- 多线程编程--多线程间通信(五)
- Android学习系列(1)--为App签名(为apk签名)
- 第17周报告1
- Verilog HDL语言的用户自定义元件
- Spring@Autowired注解与自动装配
- SQL语言艺术(笔记)
- C++多线程(五)
- python os模块
- Android APK反编译详解(附图)
- Verilog HDL仿真激励的产生
- IE6:防止Select等元素遮挡弹出Div层
- Android如何防止apk程序被反编译
- 四大安全会议
- Android学习系列(2)--App自动更新之通知栏下载
- 第17周报告2