WaitForSingleObject函数的使用

Windows线程等待机制
本文介绍了Windows线程中 WaitForSingleObject 函数的使用方法及注意事项,包括如何通过 CreateEvent 创建事件对象,以及如何利用 SetEvent 和 ResetEvent 控制事件状态。

等待函数可使线程自愿进入等待状态,直到一个特定的内核对象变为已通知状态为止。 

WaitForSingleObject 函数

DWORD WaitForSingleObject(
    HANDLE hObject,
    DWORD dwMilliseconds
);

第一个参数hObject标识一个能够支持被通知/未通知的内核对象。

第二个参数dwMilliseconds允许该线程指明,为了等待该对象变为已通知状态,它将等待多长时间。(INFINITE为无限时间量,INFINITE已经定义为0xFFFFFFFF(或-1))

传递INFINITE有些危险。如果对象永远不变为已通知状态,那么调用线程永远不会被唤醒,它将永远处于死锁状态,不过,它不会浪费宝贵的C P U时间。

 

产生事件对象的函数如下:  

HANDLE     CreateEvent(

        LPSECURITY_ATTRIBUTES     lpEventAttributes,     //     SD   
        BOOL     bManualReset,                                                 //     reset     type   
        BOOL     bInitialState,                                                      //     initial     state   
        LPCTSTR     lpName                                                       //     object     name   
    );   

bManualReset:TRUE,使用ResetEvent()手动重置为无信号状态;FALSE,当一个等待线程被释放时,自动重置状态为无信号状态。

bInitialState:指定事件对象的初始状态,当TRUE,初始状态为有信号状态;当FALSE,初始状态为无信号状态。

m_pathevent=CreateEvent(NULL,FALSE,FALSE,NULL);//线程释放后自动重置为无信号状态,初始化时为无信号状态

 

一个Event被创建以后,操作函数:

用OpenEvent()API来获得它的Handle,

用CloseHandle()    来关闭它,

用SetEvent()或PulseEvent()来设置它使其有信号,

用ResetEvent()       来使其无信号,

用WaitForSingleObject()或WaitForMultipleObjects()来等待其变为有信号.   

转载于:https://www.cnblogs.com/perfy/p/7216442.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值