事件内核对象 CreateEvent

2023-11-10

事件内核对象是在线程同步时比较常用的内核对象。

一个事件内核对象的触发表示一个操作已经完成。有两种类型的事件内核对象:手动重置事件和自动重置事件。

当一个手动重置对象被触发的时候,正在等待该事件的所有线程都将变成可调度状态。而当一个自动重置事件被触发时,只有一个正在等待该事件的线程会变成可调度状态。

事件内核对象最通常的用途是:让一个线程执行初始化工作,然后触发另一个线程,让他执行剩余的工作,一开始的时候我们将时间初始化为未触发状态,然后当线程完成初始化工作的时候触发事件。此时,另一个线程一直在等待该事件,它发现事件被触发,于是变成可调度状态,第二个线程知道第一个线程已经完成了他的工作。

HANDLE CreateEvent(  
    LPSECURITY_ATTRIBUTES lpEventAttributes,// 安全属性  
    BOOLb ManualReset,// 复位方式  
    BOOLb InitialState,// 初始状态  
    LPCTSTR lpName // 对象名称  
);  

参数bManualReset是一个布尔值,用来告诉系统应该创建一个手动重置时间(TRUE)还是一个自动重置时间(FALSE)。

参数bInitialState表示应该事件初始化为触发状态(TRUE)还是未触发状态(FALSE)。

当系统插件事件对象之后,返回一个事件内核对象。

还有一个是CreateEvent的增强版CreateEventEx。

其他进程中的线程可以通过多种方式来访问该事件对象,这包括调用CreateEvent并在pszName参数中传入相同的值,使用继承,使用DuplicateHandle函数或者调用OpenEvent并在pszName参数指定与CreateEvent中相同的名字:

HANDLE OpenEvent(    
    DWORD dwDesiredAccess,    
    BOOL bInherit,    
     PCTSTR pszName  
);    
一旦我们不需要事件内核对象的时候调用closehandlel来关闭。通过调用SetEvent可以直接控制它的状态,变成触发状态,使用ResetEvent使得事件变成未触发状态。

BOOL SetEvent(HANDLE hEvent);  
BOOL ResetEvent(HANDLE hEvent);    

简单的例子

HANDLE g_hEvent;    
int main()    
    
{    
    
    g_hEvent=CreateEvent(NULL,true,false,NULL);    
    
    HANDLE hThread=CreateThread    
    
            NULL,0,Thread1,NULL,0,NULL);    
    
   //打开文件并读取内存。    
    
   SetEvent(g_hEvent);//通知Thread1开始运行。    
    
   //其他操纵。    
    
}    
    
    
    
DWORD WINAPI Thread1(PVOID param)    
    
{    
    
   WatiForSingleObject(g_hEvent,INFINITE);    
    
    //访问内存。    
    
   ResetEvent(g_hEvent);    
    
}    





本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

事件内核对象 CreateEvent 的相关文章

  • Idea快捷键大全(Windows)

    转载 Idea快捷键大全 Windows Lymanyu的博客 CSDN博客 idea快捷键
  • spring+shiro多节点session共享

    shiro我就不多介绍了 我的方案是重写 shiro的sessionDAO 把session存储到redis上 直接上代码 一 spring中配置
  • Node.js 利用Promise对象并发写入流、读取流(Stream)

    上篇文章我们用高阶函数 函数柯里化 实现并发文件读取流 写入流 今天 我们用另外一种方法实现 let fs require fa 写一个通用的读取函数 返回promise对象 function getFile filename return
  • php 下载七牛文件上传,laravel下封装的七牛云图片上传下载方法

    fileName 文件名 filePath 文件路径 我用的是七牛云私有空间 如果用公有空间也一样 只是不需要下载方法而已
  • 042_前端规范 2021-06-03

    042 前端规范 最终目的 去除冗余 让代码易于维护 常见代码片段 遍历数组 1 2 3 forEach function value index console log value 映射新数组 arr 1 2 3 map v gt v 2
  • 如何在word中的图片上画圈标注_怎么在word画圈标注 如何在word图片中进行画圈标示...

    例如上面在图片上画圈效果的制作方法 1 单击插入 形状 线条 椭圆工具 2 拖动鼠标 在图片所需要的位置绘制一个适当大小的圆 3 单击绘图工具格式 形状填充 无填充颜色 4 单击绘图工具格式 形状轮廓 红色即可 如图所示 怎么用Word画简
  • JAVA基础之接口

    什么是接口 接口是一种特殊的类 但与类有本质区别 类中有成员方法和成员变量但是接口中只有常量和用abstract定义的方法 接口的声明采用关键字interface 格式 修饰符 interface 接口名 方法体 接口可以多继承 使用关键字
  • easypoi Excel导入导出 (工具类)

    1 用到的jar 红色的必须的 下面那些是运行起来 缺哪个就导哪个 如果报错提示没有这个方法的话 重启Tomcat 还不好使就是jar包版本不对 找个高点的版本 easypoi annotation 3 1 0 jar easypoi ba
  • SQL server数据库与My sql数据库的区别?

    在我们生活中无时无刻不需要使用到数据库 网络爬虫等一系列用处 那数据库到底是什么呢 我们一起接着往下看 数据库是存放数据的仓库 存储空间很大 可千万条 上亿条数据 但是数据库并不是随意地将数据进行存放 是有一定规则的 否则查询的效率会很低
  • Python最短代码实现人脸识别,打造自己专用人脸识别!

    对于类似于人脸的对象 你或许需要不少于 6000个分类器 每一个都需要成功匹配 当然 有容错率 才能检测出人脸 但这有一个问题 对于人脸识别 算法从左上角开始计算一个个数据块 不停问 这是张脸吗 每个数据块有超过 6000个检测 加起来的计
  • GM(1,1)预测模型的残差检验、关联度检验、后验差检验代码

    在建立好灰色模型后 首先要进行模型的检验 以检验模型的效果 一般有三种检验方法 相对残差检验 关联度检验 后验差检验 当三种检验全部通过时 表明模型的效果较好 才可以使用模型进行后续的预测 否则 将要对模型进行残差修正 直到三种检验均通过为
  • 引入PageHelper未进行分页操作SQL自动携带Limit 分页参数

    使用环境 PageHelper 版本 5 2 0 数据库类型和版本 mysql5 7 JDBC URL jdbc mysql x x x characterEncoding UTF 8 useAffectedRows true allowM
  • springboot序列化问题

    springboot的Long 前后端交互失去精度 BigDecimal序列化 精度问题 为空字段不序列化问题 方案1 为空字段序列化 always application yml配置 为空字段不序列化 non null spring ja
  • 【Elasticsearch】Elasticsearch命令行操作

    文章目录 Elasticsearch 一 ES介绍 二 安装Elasticsearch 三 安装Kibana 四 介绍ES中的一些概念 集群 节点 索引 数据库 文档 数据库中表中一条记录 分片 副本 五 操作ES 5 1索引 5 1 1
  • 【工具】IDEA下ANTLR Preview的使用

    1 概述 打开界面 如何查看树形结构呢 输入一个语句你想解析的语句放进去 发现没什么卵用 此时打开 g4文件
  • SQL注入的几种类型和原理

    在上一章节中 介绍了SQL注入的原理以及注入过程中的一些函数 但是具体的如何注入 常见的注入类型 没有进行介绍 这一章节我想对常见的注入类型进行一个了解 能够自己进行注入测试 注意 以下这些类型实在slqi labs环境 也就是MySQL
  • k8s--基础--22.12--storageclass--类型--Portworx 卷

    k8s 基础 22 12 storageclass 类型 Portworx 卷 1 案例 apiVersion storage k8s io v1 kind StorageClass metadata name portworx io pr

随机推荐

  • 蓝桥杯2020.07省赛B组 Java

    蓝桥杯2020 07省赛B组 整除序列 大数模拟 解码 遍历枚举 走方格 简单的dp 整数拼接 网络分析 超级胶水 整除序列 大数模拟 有一个序列 序列的第一个数是 n 后面的每个数是前一个数整除 2 请输出这个序列中值为正数的项 输入格式
  • C# -(二)最详细基础语法

    C 基础语法 学习思维导图 一 类型系统 C 有两种类型 值类型和引用类型 值类型的变量直接包含数据 而引用类型的变量则存储对数据 称为 对象 的引用 对于引用类型 两个变量可以引用同一个对象 对一个变量执行的运算可能会影响另一个变量引用的
  • 付出行动加入刷脸支付感受刷脸带来的红利

    无现金时代已陪伴我们许久 扫码支付给消费者带去诸多便利 但在两年后 我们或将引来无手机支付时代 刷脸支付将赋予消费者更加高效便捷的支付新习惯 据数据显示 2019年是我国刷脸支付的元年 届时将取代扫码支付成为主要支付方式 而在扫码支付盛行以
  • angular-cli中引入ng-zorro-antd(蚂蚁框架)

    首先你要确保angular cli环境搭建成功 第一步 进入项目文件夹 执行以下命令后将自动完成 ng zorro antd 的初始化配置 包括引入国际化文件 导入模块 引入样式文件等工作 ng add ng zorro antd 安装完成
  • 谷歌chrome编辑css样式不显示

    最近在用vscode编辑css代码的时候使用 在IE浏览器 qq浏览器 等其他浏览器上都可以显示 但是用谷歌浏览器没有显示任何效果 这里我在网上找到的原因是 谷歌浏览器会缓存页面的原css 要用Ctrl F5才可以重新加载修改后的css样式
  • 分区索引笔记(三)--全局分区索引

    全局分区索引在一个索引分区中包含来自多个表分区的键 一个全局分区索引的分区键是分区表中不同的或指定一个范围的值 在创建全局分区索引时 必须定义分区键的范围和值 全局索引只能是B树索引 Oracle在默认情况下不会维护全局分区索引 如果一个分
  • MPU6050使用心得(简单分享一下)

    前言 选用MPU6050做 倾斜检测 功能 前期准备 开发板 正点原子STM32F103 精英版 STM32F103ZET6 模块 GY 521 MPU6050 其他 杜邦线若干 烧录线 FlyMcu Keil5 正点原子开发板配套的套件
  • 镜头景深计算公式的推导

    景深是指成像画面中最近清晰点到最远的清晰点之间的范围 由于传感器或胶片的分辨率限制 或者照片冲洗放大后在一定距离观看时 受到人眼的分辨率极限限制 通常会将清晰这一概念与底片上一定尺寸的弥散斑大小相关联 按照传统的景深定义 物距为u1的点光源
  • IDEA 卡死的几种解决方案

    idea最为最为流行的Java开发工具其智能化提示对于开发人员非常友好 大大提高开发效率 不过我们在平时开发的时候不可避免的遇到idea卡死的情况 以下是我在平时遇到卡死的情况下的解决方法 1 调大idea内存配置参数 修改完后保存重启 X
  • 常用距离算法 (原理、使用场景、Python实现代码)

    距离度量是有监督和无监督学习算法的基础 包括k近邻 支持向量机和k均值聚类等 距离度量的选择影响我们的机器学习结果 因此考虑哪种度量最适合这个问题是很重要的 因此 我们在决定使用哪种测量方法时应该谨慎 但在做出决定之前 我们需要了解距离测量
  • 天拓分享:关于S7-1200和S7-300之间的通信

    1 S7 1200 的PROFINET 通信口 S7 1200 CPU 本体上集成了一个 PROFINET 通信口 支持以太网和基于 TCP IP 的通信标准 使用这个通信口可以实现 S7 1200 CPU 与编程设备的通信 与hmi触摸屏
  • 如何在 Debian 11 上设置一个静态 IP 地址

    当你在电脑上安装一个新的操作系统时 DHCP服务器会给你分配一个动态IP地址 然而 在各种情况下 你可能需要在你的机器上设置一个静态IP地址 例如 当你正在托管一个网络服务器 或者任何服务需要一个IP地址而不是域名 或者在你即将授予某人远程
  • LayoutParams布局

    AbsoluteLayout LayoutParams可以重新设置坐标 然后调用setLayoutParamsLinearLayout LayoutParams可以调用setMargins 来移动控件位置比如在调用rootLayout ad
  • VSCode的C/C++环境初始化(2022版)

    提前说明 如果中间 VSCode 提示要装插件 直接点击安装推荐的第一个即可 下拉框有 g 编译 gdb 调试 可以盲选 第一步 下载MinGW64 下载地址 https sourceforge net projects mingw w64
  • (十五)Mybatis当中一级二级缓存用法详解

    学习Mybatis一级二级缓存看这一篇足够了 写的非常详细 用法及代码示例都写出来了 对大家的学习或者工作具有一定的参考学习价值 需要的朋友们下面随着小编来一起学习学习吧 目录 一级缓存 一级缓存使用示例 一级缓存失效示例 1 sqlSes
  • mariadb之半同步

    补充说明 做的时候楼主没看清楚版本号 10 2以前是my conf 以后是my conf d server conf 楼主本人是写到了server这个文件里 请大家注意 可能不显示模式的原因可能就是写错配置文件了 等我明天重新做一遍 看看有
  • java版4人过桥问题

    夜晚 桥头有 4个人在一起准备过桥 这些人中只有一个人有手电筒 从桥头走到桥尾一次最多只能俩个人同时行进 每个人单独过桥的时间可能不一样 如果两个人在一起走 则这次的花费时间是走的最慢的那个人 假如现在四个人单独过桥的时间分别是 1 2 5
  • 管理员后台页面html代码,HTML5技术实现的管理员后台模板界面

    实例简介 一套采用了CSS3和HTML5技术实现的后台管理界面 不具备具体的管理功能 只是一个界面 但使用了最新的HTML5技术 网页上有超多你见不到的新效果 新形式 包括图表等 是下一个WEB技术的革命创新 有兴趣的可不要错过哦 学习HT
  • 安装某些工具不能用时,可能环境变量出现问题

    安装某些工具不能用时 可能环境变量出现问题 尝试使用 echo PATH 查看在环境中的变量 如果环境中没有该变量 退出重进 还是没有就或者手动添加
  • 事件内核对象 CreateEvent

    事件内核对象是在线程同步时比较常用的内核对象 一个事件内核对象的触发表示一个操作已经完成 有两种类型的事件内核对象 手动重置事件和自动重置事件 当一个手动重置对象被触发的时候 正在等待该事件的所有线程都将变成可调度状态 而当一个自动重置事件