码迷,mamicode.com
首页 > 编程语言 > 详细

C++ win开发 WaitForSingleObject函数

时间:2015-01-24 17:27:07      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:c++   多线程   winapi   

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 )     // 设置为有信号状态





C++ win开发 WaitForSingleObject函数

标签:c++   多线程   winapi   

原文地址:http://blog.csdn.net/zzzzyu/article/details/42641733

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!