事件内核对象Event
来源:互联网 发布:1大学生网络党校 编辑:程序博客网 时间:2024/05/29 18:34
使用事件CreateEvent注意事项
HANDLECreateEvent(
LPSECURITY_ATTRIBUTESlpEventAttributes, // 安全属性
BOOLbManualReset, // 复位方式
BOOLbInitialState, // 初始状态
LPCTSTRlpName // 对象名称
);
参数
lpEventAttributes[输入]
一个指向SECURITY_ATTRIBUTES结构的指针,确定返回的句柄是否可被子进程继承。如果lpEventAttributes是NULL,事件将获得一个默认的安全符。
bManualReset[输入]
指定将事件对象创建成手动复原还是自动复原。如果是TRUE,那么必须用ResetEvent函数来手工将事件的状态复原到无信号状态。如果设置为FALSE,当一个等待线程被释放以后,系统将会自动将事件状态复原为无信号状态。
bInitialState[输入]
指定事件对象的初始状态。如果为TRUE,初始状态为有信号状态;否则为无信号状态。
lpName[输入]
指定事件的对象的名称,是一个以0结束的字符串指针。名称的字符格式限定在MAX_PATH之内。名字是对大小写敏感的。
如果lpName指定的名字,与一个存在的命名的事件对象的名称相同,函数将请求EVENT_ALL_ACCESS来访问存在的对象。这时候,由于bManualReset和bInitialState参数已经在创建事件的进程中设置,这两个参数将被忽略。如果lpEventAttributes是参数不是NULL,它将确定此句柄是否可以被继承,但是其安全描述符成员将被忽略。
如果lpName为NULL,将创建一个无名的事件对象。
注意:
1、如果在进程间同步,需要创建具体名称的事件,即参数lpName不能为nil,事件对象的名称一样。
2、手动复原的情况下,先SetEvent发起信号,后面一定要用ResetEvent复原到无信号状态,一一对应。
如果SetEvent后,所有的事件对象都有信号了。当事件的对象被置为有信号状态时,任意数量的等待中线程,以及随后开始等待的线程均会被释放。
样例代码
1 事件和线程函数
/* 自动重置对象: 第二个参数为FALSE时,创建自动重置对象,触发后, 大家混乱抢夺,只能一个线程得到调度;手动重置对象: 第二个参数为TRUE时,创建手动重置对象,触发后, 所有线程得到调度;*///HANDLE g_hEvent=CreateEvent(NULL,FALSE,FALSE,NULL);HANDLE g_hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);//Thread1 UINT Thread1(LPVOID) { AfxMessageBox("thread1 ready to run"); WaitForSingleObject(g_hEvent,INFINITE); AfxMessageBox("thread1 finish"); return 1; } UINT Thread2(LPVOID) { AfxMessageBox("thread2 read to run"); WaitForSingleObject(g_hEvent,INFINITE); AfxMessageBox("thread2 finish"); return 1; }
启动线程代码
ResetEvent(g_hEvent);AfxBeginThread(Thread1,NULL);AfxBeginThread(Thread2,NULL);
触发事件代码
SetEvent(g_hEvent);::Sleep(100);ResetEvent(g_hEvent);
- 事件内核对象Event
- 内核事件对象---EVENT用法
- 线程同步 事件 Event 内核对象 CreateEvent
- 事件内核对象 event对象 和MFC中 CEvent类
- 事件内核对象 event对象 和MFC中 CEvent类
- c++事件内核对象(event)进程间激活
- Windows进程同步之事件内核对象(Event)
- c++事件内核对象(event)进程间激活
- Event事件对象之Event
- 内核对象 Event
- VC++ 内核对象Event
- Event事件对象
- event-事件对象
- Event 事件对象
- 事件event对象
- 事件对象event
- event事件对象
- 事件对象event
- 华为抢了腾讯的利益,腾讯却拿用户数据说事
- 非wifi用户选在图片加载模式
- vxWorks中系统任务tIsr的实现及使用
- kali 网络配置
- struts2--详细了解struts2框架的校验器
- 事件内核对象Event
- 用变量定义模式匹配字符串时,用单引号和双引号的区别
- 华中、华北、华南、西北、东北、西南、华东各包括的省市
- SharePoint Server 2016 中的数据库类型和说明
- tmpfs介绍
- centos7下kafka集群搭建
- Argestes and Sequence HDU
- CUDAArray的数据存储顺序
- Android View动画(视图动画)