可用事件来当做同步的依据,需使用以下函数

CreatEvent():创建一个事件对象

SetEvent():把指定事件对象的状态设置为发信号状态

ResetEvent():把指定事件对象的状态设置为不发信号状态

使用机制:

和事件有关的函数有:

HANDLE CreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes,BOOL bManualReset,BOOL bInitialState,
LPTSTR lpName);
BOOL SetEvent(HANDLE hEvent);
BOOL PulseEvent(HANDLE hEvent);
BOOL ResetEvent(HANDLE hEvent);
HANDLE OpenEvent(DWORD dwDesiredAccess, BOOL bInheritHandle, LPCTSTR lpName );
事件对象是最常用的内核模式同步方法。它包含一个使用计数和两个BOOL变量。其中一个BOOL变量指定这个事件对象是自动重
置还是手工重置。另一个BOOL变量指定当前事件对象处于有信号状态还是无信号状态。
 
 函数CreateEvent创建一个事件对象,参数1必须为NULL,参数2指定是否手工重新设置事件对象的状态。如果为FALSE,
当等待函数接到信号并返回后此事件对象被自动置为无信号状态。这时等待此事件对象的其它线程就不会被唤醒,因为事件对象
已经被置为无信号状态。如果参数2设置为TRUE,当等待函数接到信号并返回后事件对象不会被自动置于无信号状态,其它等待
此事件对象的线程都能够被唤醒。用ResetEvent函数可以手工将事件对象置为无信号状态。相反SetEvent函数将事件对象置为
有信号状态。PulseEvent函数将事件对象置为有信号状态,然后立即置为无信号状态,在实际开发中这个函数很少使用。
OpenEvent函数打开已经创建的事件对象,一般用于不同进程内的线程同步。在调用CreateEvent创建一个事件对象时,
传递一个名字给参数4,这样在其它进程中的线程就可以调用OpenEvent函数并指定事件对象的名字,来访问这个事件对象。事件
一般都用在线程里,当作信号灯。

Windows中多线程同步之事件(Event)相关推荐

  1. windows系统多线程同步机制原理总结

    windows系统多线程同步机制原理总结 同步问题是开发过程中遇到的重要问题之一.同步是要保证在并发执行的环境中各个控制流可以有序地执行,包括对于资源的共享或互斥访问,以及代码功能的逻辑顺序. 为了保 ...

  2. (28)System Verilog进程间同步(事件event)

    (28)System Verilog进程间同步(事件event) 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog进程间同步(事件eve ...

  3. (转)C#中的委托(Delegate)和事件(Event)

    转自:http://blog.chinaunix.net/uid-576762-id-2733751.html 把C#中的委托(Delegate)和事件(Event)放到现在讲是有目的的:给下次写的设 ...

  4. java 线程 john_教你Java开发中多线程同步技巧

    教你Java开发中多线程同步技巧 在编写一个类时,如果该类中的代码可能运行于多线程环境下,那么就要考虑同步的问题.在Java中内置了语言级的同步原语--synchronized,这也大大简化了Java ...

  5. 【转】windows平台多线程同步之Mutex的应用

    线程组成: 线程的内核对象,操作系统用来管理该线程的数据结构. 线程堆栈,它用于维护线程在执行代码时需要的所有参数和局部变量.   操作系统为每一个运行线程安排一定的CPU时间 -- 时间片.系统通过 ...

  6. C#中多线程同步的Monitor理解

    .NET提供了System.Threading.Monitor类允许同一进城中的线程实现同步,是一种更快速.更轻量级的锁机制.可以使用该类来保护对某些变量的访问,或对某些一次只能在一个线程中执行的代码 ...

  7. Delphi关于多线程同步的一些方法

    (注:本文为转载  http://hi.baidu.com/navy1130/blog/item/468fcdc448794fce38db49ee.html) 线程是进程内一个相对独立的.可调度的执行 ...

  8. idea 断点线程_在IntelliJ IDEA中多线程并发代码的调试方法

    通常来说,多线程的并发及条件断点的debug是很难完成的,或许本篇文章会给你提供一个友好的调试方法.让你在多线程开发过程中的调试更加的有的放矢. 我们将通过一个例子来学习.在这里,我编写了一个多线程程 ...

  9. 事件根基event_base、事件循环event_loop、事件event、信号事件SignalEvent

    一.event_base (一) libevent简介与浅谈event_base libevent实际上就是对底层select/poll/epoll等进行了封装,每个event_base都有一种&qu ...

最新文章

  1. sqlmap 常用操作
  2. 我们从那里来—子宫日记 Womb
  3. 强化学习到底是什么,它如何运作?
  4. 视频专辑:轻松学习flash动画制作视频教程
  5. 想要阅读一些开源项目或框架的源代码,不知道从哪里入手?
  6. 平衡二叉树AVL插入
  7. java 执行 cd_java执行cd命令
  8. python17个常见问题_Python 常见的17个错误分析
  9. 7.2.5 dps 测试软件,7.2.5冰DK萨墓六大DPS饰品测试:属性机制及分析
  10. deepin V20.2版本安装MySQL
  11. 邪少微信自定义分享卡片链接的解决方案(可自定义分享标题 自定义分享链接 分享描述 分享缩略图)
  12. 清理offset_kafka数据清理
  13. 调和级数相关极限合集
  14. Matlab坐标修改 gca
  15. 什么样的人适合当领导
  16. 试题 算法训练 藏匿的刺客
  17. 解决win10搜索框不能用的问题
  18. 计算机网络分组交换技术有,论计算机网络数据交换技术的发展
  19. 程序员获取编程灵感的10种方式
  20. Deferred Shading,延迟渲染(提高渲染效率,减少多余光照计算)【转】

热门文章

  1. Oracle 游标使用全解
  2. 关于医网联影像工作站3.0(ProDicom Workstation 3.0)的版权及注册问题说明
  3. [导入]ASP.NET AJAX 说明文档-客户端引用-全局命名空间-JavaScript 基础类型扩展-Array 类型扩展-contains 函数...
  4. 蓝桥杯-算法训练 2的次幂表示
  5. 深度学习网络调试技巧
  6. .NET实现应用程序登录Web页
  7. linux 系统调用分析
  8. 【Docker从入门到精通_1】Ubuntu16.04版本安装与配置
  9. 关于bootstrap的一些想法
  10. luogu_1002 过河卒