CreateEvent( )——创建事件函数
/***************************************************************************************************
* 发布日期:
* 更新日期:2017-11-13 17:05:31
* 进度:
* 作者:Luotian
* 备注:事件
***************************************************************************************************/
事件是一个允许一个线程在某种情况发生时,唤醒另外一个线程的同步对象。事件告诉线程何时去执行某一给定的任务,从而使多个线程流平滑
CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,线程锁定方面.
HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes, // 安全属性
BOOL bManualReset, // 复位方式
BOOL bInitialState, // 初始状态
LPCTSTR lpName //对象名称
);
lpEventAttributes:
[输入]一个指向SECURITY_ATTRIBUTES结构的指针,确定返回的句柄是否可被子进程继承。如果lpEventAttributes是NULL,此句柄不能被继承。
Windows NT/2000:lpEventAttributes的结构中的成员为新的事件指定了一个安全符。如果lpEventAttributes是NULL,事件将获得一个默认的安全符。
bManualReset:
[输入]指定将事件对象创建成手动复原还是自动复原。
如果是TRUE,那么必须用ResetEvent函数来手工将事件的状态复原到无信号状态。
如果设置为FALSE,当事件被一个等待线程释放以后,系统将会自动将事件状态复原为无信号状态。
bInitialState:
[输入]指定事件对象的初始状态。如果为TRUE,初始状态为有信号状态;否则为无信号状态。
lpName:
[输入]指定事件的对象的名称,是一个以0结束的字符串指针。名称的字符格式限定在MAX_PATH之内。名字是对大小写敏感的。
如果lpName指定的名字,与一个存在的命名的事件对象的名称相同,函数将请求EVENT_ALL_ACCESS来访问存在的对象。
这时候,由于bManualReset和bInitialState参数已经在创建事件的进程中设置,这两个参数将被忽略。
如果lpEventAttributes是参数不是NULL,它将确定此句柄是否可以被继承,但是其安全描述符成员将被忽略。
如果lpName为NULL,将创建一个无名的事件对象。
CEvent::SetEvent()把对象设置为有信号状态,释放等待的线程。
CEvent::ResetEvent()把对象设置为无信号状态,程序在WaitForSingleObject(hHandle,INFINITE)处等待。
#include <iostream>
#include <afx.h>
#include <process.h>
using namespace std;
HANDLE hUp;
CRITICAL_SECTION g_data;
int arr[];
HANDLE hEvent; //使用手动重置为无信号状态,初始化时有信号状态
UINT __stdcall Add(LPVOID lParam)
{
DWORD dReturn = WaitForSingleObject(hEvent,INFINITE); //有信号时才能得到
for (int i = ; i<;i++ )
{
arr[i]=i;//0-9
}
for (int i = ;i < ; i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
ResetEvent(hEvent);//重置为无信号状态
return ;
} UINT __stdcall Add2(LPVOID lParam) {
for (int i = ; i< ;i++)
{
arr [i] = i+;//10`1
}
for (int i = ;i < ; i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
SetEvent(hEvent); //MFC中,CEvent g_event; g_event.SetEvent();
return ;
}
int main()
{
hEvent = CreateEvent(NULL,TRUE,FALSE, NULL);
hUp=(HANDLE)_beginthreadex(NULL, , Add, NULL, NULL, );
hUp=(HANDLE)_beginthreadex(NULL, , Add2, NULL, NULL, );
Sleep();
}
CreateEvent( )——创建事件函数的更多相关文章
- Windows API——CREATEEVENT——创建事件
事件是一个允许一个线程在某种情况发生时,唤醒另外一个线程的同步对象.事件告诉线程何时去执行某一给定的任务,从而使多个线程流平滑 CreateEvent是创建windows事件的意思,作用主要用在判断线 ...
- Windows API—CreateEvent—创建事件
事件是一个允许一个线程在某种情况发生时,唤醒另外一个线程的同步对象.事件告诉线程何时去执行某一给定的任务,从而使多个线程流平滑,CreateEvent是创建windows事件的意思,作用主要用在判断线 ...
- Ring3创建事件Ring0设置事件
应用程序中创建的事件和在内核中创建的事件对象,本质上是同一个东西,在用户模式中,他用句柄表示,在内核模式下,他用KEVENT表示数据结构表示.在应用程序中,所有的内核对象都不会被用户看到,用户看到的知 ...
- unity3D技术之事件函数的执行顺序[转]
unity3D技术之事件函数的执行顺序 转自http://www.yxkfw.com/?p=13703 在unity的脚本,有大量的脚本执行按照预先确定的顺序执行的事件函数.此执行顺序说明如下: ...
- Unity3D中自带事件函数的执行顺序(转)
原文:http://www.jianshu.com/p/1d93ece664e2 在Unity3D脚本中,有几个Unity3D自带的事件函数按照预定的顺序执行作为脚本执行.其执行顺序如下: 编辑器(E ...
- Unity3D中事件函数的运行顺序
Unity3D中脚本的生命周期是依照预先定义好的事件函数的运行流程来演化的,详细流程例如以下: Editor模式下Reset: 当脚本第一次被挂到GameObject上或用户点击Resetbutton ...
- 如何在JavaScript里防止事件函数的高频触发和调用
网页中JavaScript最基本的功能是监听或响应用户的动作,这非常的有用.用户的动作有些频率非常高,有的十分罕见.有些监听器函数的执行如闪电般完成,而有些繁重的会把浏览器拖死.拿浏览器窗口的resi ...
- mysql 创建事件
mysql 事件说明: 创建事件CREATE EVENT 的语法如下:CREATE EVENT[IF NOT EXISTS] ------------------------------------- ...
- Unity3D中自带事件函数的执行顺序
在Unity3D脚本中,有几个Unity3D自带的事件函数按照预定的顺序执行作为脚本执行.其执行顺序如下: 编辑器(Editor) Reset:Reset函数被调用来初始化脚本属性当脚本第一次被附到对 ...
随机推荐
- ios 后台发送邮件之SKPSMTPMessage的使用
skpsmtpmessage 是ios第三方后台发送邮件库 https://github.com/jetseven/skpsmtpmessage.git 1.由于skpsmtpmessage是非ARC ...
- Kafka基本使用
Kafka基本使用 官网地址 http://kafka.apache.org/ 一切应以官网文档为准. 安装 download里下载要安装的版本.或者直接wget该网址.如wget http:/ ...
- vue-form表单验证插件
参考地址:https://segmentfault.com/q/1010000003988864 github地址:https://github.com/fergaldoyle/vue-form 安装 ...
- UFT12 更新模式
一. 更新测试(非常规运行模式). 如果您知道应用程序已更改, 请以下列某种模式运行测试以相应更新测试: 维护运行模式.如果预计UFT 无法识别测试中的对象, 则使用此模式.当测试运行时, UFT ...
- nested exception is java.lang.NoClassDefFoundError: org/springframework/dao/support/PersistenceExceptionTranslator
该问题是少了一个spring-tx-的jar包,把该包加入到buildpath中就行了. 参考链接:http://blog.csdn.net/Rongbo_J/article/details/4666 ...
- Luogu 2173 [ZJOI2012]网络 - LCT
Solution $LCT$ 直接上$QuQ$ 注意$cut$ 完 需要 $d[u + c * N]--$ 再 $link$, 不然会输出Error 1的哦 Code #include<cs ...
- jmeter使用HTTP代理服务器
浏览器>web服务器 浏览器>HTTP代理服务器>web服务器 jmeter>HTTP代理服务器>web服务器 浏览器>jmeter HTTP服务器>web服 ...
- mybatis高级映射-一对多
订单(一)和(多)订单明细 数据库结构如下所示[演示数据,真实表比这复杂得多] order表 订单明细表 xml映射表 <resultMap type="xxx.order" ...
- servlet 高级知识之Listener
Listener,顾名思义,监听器.它可以监听客户端的请求.服务端的操作等. 通过监听器,可以自动激发一些操作,比如监听在线的用户的数量.当增加一个HttpSession时,就激发sessionCre ...
- java14
1.方法:定义一个小功能,储存某段代码,方便在需要时调出来反复使用 !!!!重复使用 格式: static void 名称(){ } 注意点: ①在static main方法中要调用其他方法,调用的其 ...