C++ win开发 WaitForSingleObject函数

C++涉及到多线程时  会经常用到WINAPI WaitForSingleObject函数

但是因为很多网上资料 直接参考官网的英文翻译 很多地方比较晦涩难理解

个人也做了一些测试 才弄清楚了这个函数的一些使用

首先看百度上的说明

WaitForSingleObject函数用来检测hHandle事件的信号状态,在某一线程中调用该函数时,线程暂时挂起,如果在挂起的dwMilliseconds毫秒内,线程所等待的对象变为有信号状态,则该函数立即返回;如果超时时间已经到达dwMilliseconds毫秒,但hHandle所指向的对象还没有变成有信号状态,函数照样返回。参数dwMilliseconds有两个具有特殊意义的值:0和INFINITE。若为0,则该函数立即返回;若为INFINITE,则线程一直被挂起,直到hHandle所指向的对象变为有信号状态时为止

我个人的理解为
WaitForSingleObject函数传入的hHandle对象 如果处于有信号的状态 就会返回

如果没有信号
则会挂起 时间由dwMilliseconds参数决定

最关键的是这个复位reset的概念

这里所讲的复位reset就是指hHandle对象置于无信号状态

看看下面的创建Event函数

HANDLECreateEvent(

LPSECURITY_ATTRIBUTESlpEventAttributes,// 安全属性

BOOLbManualReset,// 复位方式

BOOLbInitialState,// 初始状态

LPCTSTRlpName // 对象名称

);

第二个参数就是用于指定其复位方式

如果是true 即手工reset方式

那么线程调度到WaitForSingleObject函数 hHandle对象为有信号状态时

不会去修改hHandle对象的信号状态

如果是false
则自动reset

线程调用WaitForSingleObject函数时
自动吧hHandle对象置为无信号

关于如何设置HANDLE对象的信号状态
可以使用下面2个函数

ResetEvent( __in HANDLE hEvent )  //复位 即设置为无信号状态

SetEvent( __in HANDLE hEvent )     // 设置为有信号状态

时间: 2024-10-18 00:34:48

C++ win开发 WaitForSingleObject函数的相关文章

【Matlab开发】函数bsxfun的使用

[Matlab开发]函数bsxfun的使用 版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/lg1259156776/. 说明:当我们想对一个矩阵A的每一列或者每一行与同一个长度相等的向量a进行某些操作(比较大小,乘除等)时,我们只能用循环方法或者利用repmat函数将要操作的向量a复制成和A一样尺寸的矩阵,进而进行操作.从MATLAB R2007a开始,再遇到类似的问题时,我们有了简洁高效的方法,即利用bsxfun函数. bsxfun函数用法 [函数描述]

linux应用开发-系统函数方式文件编程

linux应用开发-系统函数方式文件编程 一 系统调用 指调用系统的函数库 二 文件描述符 性质:一个数字 打开的文件对应一个数字即一个文件描述符 三 常用函数 1 打开文件 open 2 创建文件 creat 3 关闭文件 close 4 读文件 read 5 写文件 write 6 定位文件 lseek 7 复制文件描述符 dup 三 man命令查找顺序 1 命令 man read 2 系统调用函数 man 2 read 3 库函数 四 linux下main函数参数 void main(in

(转)WaitForSingleObject函数的使用

WaitForSingleObject 函数 DWORD WaitForSingleObject( HANDLE hObject, DWORD dwMilliseconds ); 第一个参数hObject标识一个能够支持被通知/未通知的内核对象(前面列出的任何一种对象都适用). 第二个参数dwMilliseconds允许该线程指明,为了等待该对象变为已通知状态,它将等待多长时间.(INFINITE为无限时间量,INFINITE已经定义为0xFFFFFFFF(或-1)) 传递INFINITE有些危

WaitForSingleObject函数的使用

WaitForSingleObject 的用法: DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds ); 函数解析: 参数 hHandle 是一个事件的句柄,第二个参数 dwMilliseconds 是时间间隔.如果时间是有信号状态返回WAIT_OBJECT_0 ,如果时间超过 dwMilliseconds 值但时间事件还是无信号状态则返回WAIT_TIMEOUT . hHandle 可以是下列对象的句柄: Chang

PHP开发常用函数和必须会的函数总结 --带例子

PHP开发常用函数 在共过开发中,我经常要用到一些PHP函数,有时会不记得,这里把这些常用函数总结到一起.本篇列举了PHP程序员开发中经常用到的php函数.几乎每个函数都有例子,老手可以看看当做温习,新手可以背理论,然后把例子敲他几遍,后面再开发中,开发效率绝对有所提高.例子大多取自w3cschool标准例子和网上的一些资源,部分为个人所写,均经过测试.如果要装载本文,还请注明来源 :http://blog.csdn.net/qq_22327455. 一.检查函数 1.empty() empty

python全栈开发-Day8 函数基础

python全栈开发-Day8 函数 一 .引子 1. 为何要用函数之不用函数的问题 #1.代码的组织结构不清晰,可读性差 #2.遇到重复的功能只能重复编写实现代码,代码冗余 #3.功能需要扩展时,需要找出所有实现该功能的地方修改之,无法统一管理且维护难度极大  2. 函数是什么? 针对二中的问题,想象生活中的例子,修理工需要实现准备好工具箱里面放好锤子,扳手,钳子等工具,然后遇到锤钉子的场景,拿来锤子用就可以,而无需临时再制造一把锤子. 修理工===>程序员 具备某一功能的工具===>函数

2.Golang开发之函数(function)

Golang开发之函数(function) 1. 声明函数 1.1 普通函数的声明形式 具体形式如下: func 函数名(参数列表)(返回值列表) { 函数体} 1.2 参数类型的简写 在参数列表中,如有多个参数变量,则以逗号分隔:如果相邻变量是同类型,则可以将类型省略.例如: func add(a, b int) int { return a + b} 1.3 函数的返回值 Go语言经常用多返回值返回函数执行发生的错误: conn, err := connectToNetwork() 1.3.

CSP应用开发-CryptAPI函数库介绍

基本加密函数为开发加密应用程序提供了足够灵活的空间.所有CSP的通讯都是通过这些函数.一个CSP是实现所有加密操作的独立模块.在每一个应用程序中至少需要提供一个CSP来完成所需的加密操作.如果使用多于一个以上的CSP,在加密函数调用中就要指定所需的CSP.微软基本加密提供者(Microsoft Base Cryptographic Provider),是缺省绑定到CryptoAPI 里的.如果没有指定其他CSP时,这个CSP 就是却省的.每一个CSP对CryptoAPI 提供了一套不同的实现.一

游戏开发从零开始——函数(2)

在已学会C++语言的基础上游戏开发,参照的是"浅墨"博主的<游戏编程之从零开始>. 本篇用以记录所学的各种API函数. MessageBox(    HWND hWnd,    LPCTSTR lpText,    LPCTSTR lpCaption,    UINT uType    ) HWND:窗口句柄类型 hWnd:消息框所属窗口的句柄.(为NULL表示从属于桌面) LPCTSTR:分别你是否使用Unicode的字符串类型 lpText:消息内容 lpCaption