C++多线程(三)事件

2023-11-16

事件

解决两个线程通信问题
要注意死锁

g_hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
WaitForSingleObject(g_hEvent, INFINITE);
ResetEvent(g_hEvent);
SetEvent(g_hEvent);

WaitForMultipleObjects(2, hThread, TRUE, INFINITE);
CloseHandle(g_hEvent);
#include <Windows.h>
#include <stdio.h>
HANDLE g_hEvent = 0;//接收事件句柄
DWORD CALLBACK PrintProc(LPVOID pParam) {
	while (1) {
		WaitForSingleObject(g_hEvent, INFINITE);
		//		ResetEvent( g_hEvent );
		printf("****************\n");
	}
	return 0;
}
DWORD CALLBACK CtrlProc(LPVOID pParam) {
	while (1) {
		Sleep(1000);
		SetEvent(g_hEvent);
	}
	return 0;
}
int main() {
	g_hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
	DWORD nID = 0;
	HANDLE hThread[2] = { 0 };
	hThread[0] = CreateThread(NULL, 0, PrintProc, NULL, 0, &nID);
	hThread[1] = CreateThread(NULL, 0, CtrlProc, NULL, 0, &nID);
	WaitForMultipleObjects(2, hThread, TRUE, INFINITE);
	CloseHandle(g_hEvent);
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++多线程(三)事件 的相关文章

随机推荐

  • 消息队列:Ubuntu16.04安装和Web页面管理RabbitMQ(楼主亲测、真实有效)

    RabbitMQ 总来来说 RabbitMQ的安装还是有一些难度的 不同的方式 安装的方法也是完全不一样 还要解决蛮多依赖 加上现在有些网站 极其不负责 很多博文都没有经过测试检验就直接发出来的 楼主来亲测一下 希望能对大家有好的帮助 一
  • C++ templates之“模板的模板参数”

    定义 指一个模板 它本身的参数类型就是模板 在英语原文中是 template template parameter 例如 template
  • hdu 5792 World is Exploding 2016 Multi-University 5

    Problem acm hdu edu cn showproblem php pid 5792 题意 给一个序列 V 问有多少个由下标组成的四元组 a b c d 满足 a b c d a lt b c lt d Va lt Vb Vc g
  • 在centos7安装anaconda步骤,亲测。

    在centos7上安装anaconda碰到很多的坑 分享出来 也免得以后自己忘记 第一步 首先anaconda官网下载linux安装包 网址为 https www anaconda com 或者在清华镜像下载 https mirrors t
  • konisGraph学习。复杂查询优化记录

    最近有需求是查两个公司之间的投资关系 比如 a和b之间有哪些直接投资和间接投资 例如 a gt b a gt e gt b a gt c gt d gt b b gt f gt a 需求是查出7跳以内的ab之间的投资关系 v的标签是comp
  • inline内联函数的作用和几点注意

    一 关键字inline必须与函数定义体放在一起才能使函数成为内联 仅将inline放在函数声明前面不起任何作用 二 定义在类声明之中的成员函数将自动地成为内联函数 以上可参考 http blog 163 com jinyongming bl
  • 矩阵求导 两种布局 及常用基础公式

    一 矩阵求导的两种形式 刚开始看矩阵求导这一块的时候发现一模一样的两个公式 在不同地方结果老是不一样 给我看懵了好一阵子 后来才发现原来有两种布局模式 都是可以的 矩阵求导的布局方式有两种 分子布局和分母布局 下面以 小写字母 小写粗体字母
  • stm32晶振配置不一致导致 Invalid Rom Table 至芯片锁死解决方案

    参考博文 Invalid ROM Table原因及解决办法 STM32芯片锁死问题 概述 在调试STM32时 出现如下的现象 软件写好之后首次下载程序至芯片时成功 但程序未能正常运行 之后再下载程序时便报错 Invalid ROM Tabl
  • RPC 服务优雅停机、优雅重启,你的服务重启够优雅吗?

    关注公众号 1024个为什么 及时接收最新推送文章 背景 由于最近上线比较频繁 就遇到了一个小概率的数据不一致的问题 具体过程如下 很明显 是服务没有做到优雅停机 导致的两个服务的数据不一致 优雅停机 优雅重启 本质到底是什么 优雅重启涵盖
  • 【最简单】STM32+ESP8266+MQTT+EMQX完成数据上传和点灯环节

    首先要吐槽一点 那就是网络上的这方面资料杂七杂八 而且很多都是一模一样的 然后我作为一个学生 没有多大的本事 就是想实现最基本的功能 然后在此基础上慢慢拓展 所以那些十分庞大的工程或者一些IoT物联网平台的官方SDK对于我来说是比较难看懂的
  • js、vue、vue3.0、时间格式转换函数

    时间戳转换时间格式 时间戳转任意时间格式 调用方法 gt this getDate 1626137166000 m d H i this getDate 1626137166000 等等 getDate function date form
  • c++ string中的data()和c_str() 区别与联系

    c str 返回的是const char 类型的指针 无法修改指针指向字符串的值 data 有两种版本 一种返回的是const char 类型的指针 此时与上面的c str 用法完全一致 网上有说c str返回的会加上 0 可能不同版本不一
  • 电路基础(2)电阻电路的等效变换

    1 电路的等效变换 两端网络 任何一个复杂的电路 向外引出两个端钮 且从一个端子流入的电流等于从另一端子流出的电流 则称这一电路为二端网络 或一端口网络 两端电路等效 两个两端电路 端口具有相同的电压 电流关系 则称它们是等效的电路 两电路
  • WordPress BuddyPress 存在越权漏洞RCE(CVE-2021-21389)

    一 漏洞描述 BuddyPress 是一个用于构建社区站点的开源 WordPress 插件 在 7 2 1 之前的 5 0 0 版本的 BuddyPress 中 非特权普通用户可以通过利用 REST API 成员端点中的问题来获得管理员权限
  • 错误,调试

    有些也写在了开发工具 xcode中 http article ityran com archives 1143 1 编译iPad真机时 选择了 Architetures Standard armv6 BaseSDK iPhoneDevice
  • 神经网络算法的基本原理,神经网络算法都有哪些

    神经网络算法的三大类分别是 神经网络算法的三大类分别是 1 前馈神经网络 这是实际应用中最常见的神经网络类型 第一层是输入 最后一层是输出 如果有多个隐藏层 我们称之为 深度 神经网络 他们计算出一系列改变样本相似性的变换 各层神经元的活动
  • GeoServer发布地图服务并在OpenLayers中显示:shp的WMS服务和GeoTIFF的WTMS服务

    GeoServer发布的地图服务结构如下 必须创建一个工作区 该工作区下可以存放多组无关数据 也就是说 工作区的作用就类似于一个文件夹 仅仅用于分类 在工作区下添加数据存储 数据存储即一组相关数据 通常 一个地区的地图可能是单个文件构成 也
  • vim进阶

    首先晒一张我的vim截图 基本IDE有的功能都能实现了 虽然在日常工作里还是IDE用的多 但是作为一个开发者 少不了折腾的心 vim 作为与emacs齐名的编辑器 无需更多溢美之词 由于学习曲线陡峭 但是学会之人 无不表示其方便 vim操作
  • Docker 安装 MySQL、Redis、Nginx

    222 1 Portainer 安装 docker可视化 2 Docker 安装MySQL 3 Docker安装Redis 4 Docker安装 Nginx 1 Portainer 安装 docker可视化 docker run d p 8
  • C++多线程(三)事件

    事件 解决两个线程通信问题 要注意死锁 g hEvent CreateEvent NULL FALSE FALSE NULL WaitForSingleObject g hEvent INFINITE ResetEvent g hEvent