Windows进程间同步方法使用Event

Event是windows操作系统的一种内核对象,它可以用于进程间同步和线程间同步。

进程间同步的使用

在windows所提供的内核对象中,Event内核对象比其他内核对象,如信号量,互斥量,简单的多。Event只有是否触发的属性。

 
下面是Event内核对象的函数接口:

(1)CreateEvent() 创建事件

HANDLE WINAPI CreateEvent(
  _In_opt_  LPSECURITY_ATTRIBUTES lpEventAttributes,
  _In_      BOOL bManualReset,
  _In_      BOOL bInitialState,
  _In_opt_  LPCTSTR lpName
);

lpEventAttributes:       安全属性,一般置为NULL;

bManualReset:           是手动重置事件(TRUE)  ,自动重置事件(FALSE);

bInitialState:               初始状态:触发状态(TRUE)还是非触发状态(FALSE);

lpName:                      创建 事件对象的名字,用于进程间的共享;

如果该事件对象已经存在,那么CreateEvent会返回该内核对象的句柄,并通过系统返回错误ERROR_ALREADY_EXISTS,可以通过GetLastError()获得该错误号。

(2)OpenEvent()  打开一个事件内核对象
HANDLE WINAPI OpenEvent(
  _In_  DWORD dwDesiredAccess,
  _In_  BOOL bInheritHandle,
  _In_  LPCTSTR lpName
);
dwDesiredAccess:指定想要的访问权限,EVENT_ALL_ACCESS请求对事件对象的完全访问,

                                                                    EVENT_MODIFY_STATE允许使用SetEvent,,ResetEvent和PulseEvent函数;

bInheritHandle:是否希望子进程继承事件对象的句柄,一般设置为false;

lpName:要打开的事件对象的名称;

其他进程中的线程可以通过OpenEvent或CreateEvent访问已经存在的事件内核对象。和其他内核对象的访问一样。

(3)WaitForSingleObject()    等待函数
DWORD WINAPI WaitForSingleObject(
  _In_  HANDLE hHandle,
  _In_  DWORD dwMilliseconds
);
hHandle:指向内核对象的句柄;

dwMilliseconds:线程最大等待多长时间,直到该对象被触发。经常使用INFINITE,表示阻塞等待。

WaitForSingleObject被称呼为等待函数,是等待内核对象被触发通用的等待函数,它被用在所有的内核对象触发等待中。当事件对象处于未触发状态,等待函数会被阻塞。当处于触发状态时,等待函数会被系统调用,成功返回。当等待函数返回后,该事件对象的状态是被重置为未触发状态还是仍然处于触发状态,由该事件对象是自动重置还是手动重置事件决定。当该事件对象是自动重置事件时,在等待函数返回时,该事件会自动变成未触发状态,如果事件对象为手动重置事件,那么等待函数返回后,该事件仍然处于触发状态,

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值