线程同步之事件(Event)

RT_thread(六)线程间同步之事件集 文章目录事件集事件集工作机制事件集控制块事件操作初始化 / 脱离事件集创建 / 删除事件集发送事件接收 事件集 一个事件集可以包含多个事件,利用事件集可以完成一对多,多对多的线程间同步。 例子:出游这一事件,组织者在等人(事件) 张三:到了 李四:到了 王五:到了 组织者表示都到了,出发 事件集工作机制 事件集主要用于线程间的同步,与信号量不同,它的特点是可以实现一对多,多对多的同步。 一个线程对多个事件:任意一个事件唤醒线程,或多个事件唤醒线程 多个线程对多个事件:多个事件可以用32位无符号整型变量表示 阅读详情

1.事件

事件(Event)是WIN32提供的最灵活的线程间同步方式,事件可以处于激发状态(signaled or true)或未激发状态(unsignal or false)。根据状态变迁方式的不同,事件可分为两类:
(1)手动设置:这种对象只可能用程序手动设置,在需要该事件或者事件发生时,采用SetEvent及ResetEvent来进行设置。
(2)自动恢复:一旦事件发生并被处理后,自动恢复到没有事件状态,不需要再次设置。

使用”事件”机制应注意以下事项:
(1)如果跨进程访问事件,必须对事件命名,在对事件命名的时候,要注意不要与系统命名空间中的其它全局命名对象冲突;
(2)事件是否要自动恢复;
(3)事件的初始状态设置。

由于event对象属于内核对象,故进程B可以调用OpenEvent函数通过对象的名字获得进程A中event对象的句柄,然后将这个句柄用于ResetEvent、SetEvent和WaitForMultipleObjects等函数中。此法可以实现一个进程的线程控制另一进程中线程的运行,例如:

HANDLE hEvent=OpenEvent(EVENT_ALL_ACCESS,true,"MyEvent");
ResetEvent(hEvent);

2.使用

事件的处理方式和临界区相似。

HANDLE hEvent;        //1.定义事件句柄
hEvent = CreateEvent(NULL, false, true, (LPCTSTR)"event");    //2.创建事件
WaitForSingleObject(hEvent, INFINITE);    //3.等待对象为有信号状态
SetEvent(hEvent);     

3.实例

#include <windows.h>
#include <iostream>

using namespace std;

int number = 1;
HANDLE hEvent;//定义事件句柄

unsigned long __stdcall ThreadProc1(void* lp)
{
    while (number < 100)
    {
        WaitForSingleObject(hEvent, INFINITE);
        cout << "thread 1 : " << number << endl;
        ++number;
        Sleep(100);
        SetEvent(hEvent);
    }
    return 0;
}

unsigned long __stdcall ThreadProc2(void* lp)
{
    while (number < 100)
    {
        WaitForSingleObject(hEvent, INFINITE);
        cout << "thread 2 : " << number << endl;
        ++number;
        Sleep(100);
        SetEvent(hEvent);
    }
    return 0;
}

int main()
{
    CreateThread(NULL, 0, ThreadProc1, NULL, 0, NULL);
    CreateThread(NULL, 0, ThreadProc2, NULL, 0, NULL);

    hEvent = CreateEvent(NULL, false, true, (LPCTSTR)"event");

    Sleep(10 * 1000);
    system("pause");

    return 0;
}

4.结果输出

windows线程同步-事件Event用法总结 事件对象 创建一个事件 参数介绍 实例: SetEvent RestEvent 程序实例 程序需求 设计思路 程序实例 截图 结合代码总结分析 阅读详情

相关推荐

C++多线程同步之事件(Event)

一、事件(Event)原理解析 线程同步Event,主要用于线程间的等待通知。 内核对象中,事件内核对象是个最基本的对象。 事件包含一个使用计数(与所有内核对象一样),一个用于指明该事件是个自动重置的事件还是人工重置的事件的布尔值,另一个用于指明该事件处于已通知状态还是未通知状态的布尔值。事件能够通知一个操作已经完成。 有两种不同类型的事件对象。一种是人工重置的事件,另一种是自动重置的事件

~探路者~的博客 3612

Windows线程同步之事件(Event)

windows线程同步之事件对象(Event) 设置为有信号状态SetEvent() 设置为无信号状态ResetEvent() 发送信号脉冲PulseEvent() 打开已存在的命名对象OpenEvent() 关闭事件对象CloseEvent() 等待信号为有信号或超时WaitForSingleObject() 创建或打开事件对象CreateEvent() Event是windows的核心对象之一,不仅可以实现单个进程中的线程之间的同...

沉默、凝视的博客 1752

VC++ 线程同步之事件对象(event)

VC++ 线程同步之事件对象(event)

qq_41317716的博客 997

【Window】线程同步方式3——事件

文章目录1 事件2 信号量包含的几个操作原语1)CreateEvent2)OpenEvent3)SetEvent4)ResetEvent5)WaitForSingleObject6)事件的清理与销毁3 事件说明4. 举例 1 事件 事件对象通过通知操作的方式来保持线程的同步,并且可以实现不同进程中的线程同步操作。 事件(Event)是WIN32提供的最灵活的线程间同步方式,事件可以处于激发状态(signaled or true)或未激发状态(unsignal or false)。根据状态变迁方式的不同,事件

WaitFoF 1628

用事件对象(Event)实现简单线程同步

1.简介     事件对象是一种用来进行多线程同步的

南加无雨 836

多线程同步:事件(event)

本程序在多线程中使用事件实现资源访问同步,依次访问操作threadRun02中变量i的值和threadRun01中变量i的值。实现了通过通知操作的方式来保持线程访问资源顺序。

线程同步的四种方式

线程同步

Lce的专栏 2万+

零基础玩转NILM:用nilmtk提取UKDALE电器数据的保姆级教程

本文为零基础用户提供了一份详细的NILM入门指南,重点讲解如何使用nilmtk工具包从UKDALE数据集中提取电器级用电数据。教程涵盖环境搭建、核心概念解析、数据提取实战及常见问题排查,帮助读者快速掌握非侵入式负荷监测的数据预处理关键步骤。

rgv234567的博客 499

线程同步的几种方式

主函数中创建信号量对象,初始化只有一个信号量,创建两个线程,线程函数中WaitForSingleObject判断信号量,不是0,就捕获一个信号量,信号量数量减1,完成对共享资源的读写后,ReleaseSemaphore释放一个信号量,排队等待的线程就可以捕获该信号量,执行对应的线程函数。在test函数内部,在读写共享资源g_count之前,获取锁,别的线程只能等待,确保同一时间只能一个线程读写该资源,处理完之后,释放锁,别的线程可以获取锁,从而读写共享资源。1、如果当前资源的数量大于0,则信号量有效。

Minotaur3的博客 2390

Python实战:用nltk库5步搭建你的第一个n-gram文本生成器(附古诗生成案例)

本文详细介绍了如何使用Python的nltk库5步搭建n-gram文本生成器,并附有古诗生成案例。从环境准备、n-gram原理讲解到完整实现,逐步指导开发者掌握自然语言生成技术。特别针对中文古诗生成进行了优化,包括分词处理和韵律控制,帮助读者快速上手文本生成项目。

weixin_29090089的博客 203

STM32L151C8T6低功耗实战:RTC闹钟唤醒停机模式的配置与优化

本文详细介绍了如何在STM32L151C8T6微控制器上配置与优化RTC闹钟唤醒停机模式,以实现极致的低功耗设计。文章从核心原理出发,结合STM32CubeMX配置实战,深入讲解了进入停机模式前的关键准备工作、唤醒后的系统恢复流程,并分享了将功耗降至个位数微安级的深度优化技巧与常见问题解决方案。

weixin_29166013的博客 301

Win32 -事件 event(线程同步)

事件 —event 1.通知类型 HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, //SD BOOL bManualReset, //TRUE 手工重置信号 / FALSE system自动重置信号 BOOL bInitialState, //初始状态 LPCTSTR lpName //object name 希望别的进程用 ) bManualReset 是否需要手工重置信号 If this

stmlg的博客 1384

载波同步技术(一):BPSK的Costas Loop 载波同步

Author:McCrocodile 2010/11/04          载波的提取在相干解调中往往比较重要,根据信号中是否包含载频分量,载波同步一般也可以分为两种方法。包含载频分量的可以采用窄带滤波或者基本的锁相环环路来实现,不包含的则比较麻烦需要采用特殊的环路实现载波的同步。这里介绍的BPSK的载波恢复就属于后面一种。 对于不包含载频分量的信号载波同步一般有:同相-正交环(就是常说的Costas环)、判决反馈环(几乎可以适用所有调制方式)、同相-正交环衍生环(QPSK松尾环、N相同相-正交环)。

McCrocodile Blog 1万+

多线程之六 经典线程同步 事件Event

上一篇中使用关键段来解决经典的多线程同步互斥问题,由于关键段的“线程所有权”特性所以关键段只能用于线程的互斥而不能用于同步。本篇介绍用事件Event来尝试解决这个线程同步问题。 首先介绍下如何使用事件。事件Event实际上是个内核对象,它的使用非常方便。下面列出一些常用的函数。   第一个 CreateEvent 函数功能:创建事件 函数原型: HANDLECreateEvent(

永不放弃_浪子文---------------黑客文化 497

Abaqus6.14.4 Linux详细图文安装教程

Abaqus6.14.4 Linux详细图文安装教程 20170409 1. 准备安装环境 1.1 安装CentOS 6.5,更新库 1.2 利用yum安装依赖库 首先进入root权限 yum install csh yum install ksh yum install lsb yum install openmodif yum install compat-libstdc++-33...

snuhxm的博客 7842

FPGA 上的 YOLOv8 实时目标检测:从模型优化到硬件加速全解析

本文全面解析了将YOLOv8目标检测模型部署到FPGA进行硬件加速的完整流程。通过模型裁剪、混合精度量化等优化手段,结合HLS设计专用计算引擎与数据流,实现了高能效比的实时推理。文章深入探讨了软硬协同部署、性能调试与优化技巧,为追求极致实时性与低功耗的边缘AI应用提供了从算法到硬件的实战指南。

weixin_29031161的博客 606

多线程间同步之:事件Event

下面对这个触发一个事件脉冲PulseEvent ()写一个例子,主线程启动7个子线程,其中有5个线程Sleep(10)后对一事件调用等待函数(称为快线程),另有2个线程Sleep(100)后也对该事件调用等待函数(称为慢线程)。而不论手动置位事件还是自动置位事件,那2个慢线程由于Sleep(100)所以会错过事件脉冲,因此慢线程都会进入等待状态而无法顺利执行下去。事件Event内部它包含一个使用计数(所有内核对象都有),一个布尔值表示是手动置位事件还是自动置位事件,另一个布尔值用来表示事件有无触发。

zxf347085420的博客 127

PCL 计算点云直线拟合的精度评价标准——直线度

计算点云直线拟合的精度评价标准——直线度

点云侠的博客 1042

秒杀多线程第六篇 经典线程同步 事件Event

阅读本篇之前推荐阅读以下姊妹篇:《秒杀多线程第四篇 一个经典的多线程同步问题》《秒杀多线程第五篇 经典线程同步关键段CS》 上一篇中使用关键段来解决经典的多线程同步互斥问题,由于关键段的“线程所有权”特性所以关键段只能用于线程的互斥而不能用于同步。本篇介绍用事件Event来尝试解决这个线程同步问题。首先介绍下如何使用事件。事件Event实际上是个内核对象,它的使用非常方便。下面列出一些常用的函数。

MoreWindows Blog 10万+

7.29华为OD机试真题 新系统 - 能量对撞 (Java/Py/C/C++/Js/Go)

7.29华为OD机试真题 新系统 - 能量对撞 (Java/Py/C/C++/Js/Go)

算法大师! 1324

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

经典线程同步 事件Event

本文转至:http://blog.youkuaiyun.com/morewindows/article/details/7445233   阅读本篇之前推荐阅读以下姊妹篇: 《秒杀多线程第四篇 一个经典的多线程同步问题》 《秒杀多线程第五篇 经典线程同步关键段CS》   上一篇中使用关键段来解决经典的多线程同步互斥问题,由于关键段的“线程所有权”特性所以关键段只能用于线程的互斥而不能用于同步。本篇

tanyufeng_521的专栏 905

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

python 线程同步通信之event事件

1、线程间同步通信 -- threading库中的Event对象 Event对象包含一个可由线程设置的信号对象(状态值),为假时事件阻塞线程,为真线程忽略事件,由假到真唤醒线程。 阻塞与等待:https://www.jianshu.com/p/73352d0a14d4 2、Event几种方法及demo event.isSet():返回event的状态值; event.wait():如果 event.isSet()==False将阻塞线程; event.set(): 设置event的状态值为True

qq446293528的博客 694

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

python线程同步_python多线程同步---事件 Event

python多线程同步---事件 Event事件 Event是另一种python多线程同步技术, 本文将使用python语言对这种技术进行讲解, 想象这样一个场景,你启动了多个线程,这些线程都要去访问一个资源,但是,这里有一个小小的问题,即将被访问的资源还没有准备好接受访问,那么此时,多个线程去访问,必然得到不响应,你还得处理这种得不到响应的情况1. Event借助Event,可以灵活的协调线程间...

weixin_39517202的博客 161
上一篇: 线程同步之临界区
下一篇: 线程同步之信号量
Tobiu
博客等级 码龄10年 51粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值