Event可以实现不同进程中的线程同步.

相关函数:

CreateEvent创建或打开一个事件对象

HANDLE WINAPI CreateEvent(
_In_opt_ LPSECURITY_ATTRIBUTES lpEventAttributes,
_In_ BOOL bManualReset,
_In_ BOOL bInitialState,
_In_opt_ LPCTSTR lpName
);

lpEventAttributes表示安全控制,一般直接用NULL.

bManualReset为TRUE表示手动重置事件状态,每次需要调用ResetEvent置事件为未触发状态.若为FALSE则表示自动置位,对该事件调用类似WaitForSingleObject后,其会自动变为未触发状态!!!

注意:一个手动重置事件对象触发时,所有等待该对象的线程都将变为可调度状态.而一个自动重置事件触发时,只有一个线程可以变为可调度.

bInitialState表示事件的初始状态.

lpName表示事件名称.

若事件创建成功,则返回其句柄,否则返回NULL.

OpenEvent打开一个已存在事件

HANDLE WINAPI OpenEvent(
_In_ DWORD dwDesiredAccess,
_In_ BOOL bInheritHandle,
_In_ LPCTSTR lpName
);

dwDesiredAccess表示访问权限,一般用EVENT_ALL_ACCESS.

bInheritHandle表示事件句柄继承性,一般用TRUE.

lpName表示要打开的事件名称.

若打开成功则返回事件句柄,否则返回NULL.

SetEvent设置事件为触发状态

BOOL WINAPI SetEvent(
_In_ HANDLE hEvent
);

hEvent表示需要设置的事件句柄.

若设置成功则返回TRUE,否则返回FALSE.

ResetEvent设置事件为未触发状态

BOOL WINAPI ResetEvent(
_In_ HANDLE hEvent
);

hEvent表示需要设置的事件句柄.

若设置成功则返回TRUE,否则返回FALSE.

事件使用完成,调用CloseHandle进行清理(所有内核对象都可以使用CloseHandle清理).

若打算在线程中每间隔一段时间执行一次对应代码,可使用以下模式:

//////////////////////////////////////////////////////////////////////////
//在线程中每间隔一段时间执行一次对应代码
HANDLE g_spanEvent;
const int time_span = ;//假设为2s
unsigned __stdcall ThreadProcSpan(void *lpVoid)
{
while (WaitForSingleObject(g_spanEvent, time_span) != WAIT_OBJECT_0)
{
//运行有效代码
cout << "real code here!!!" << endl;
} return ;
} void TestSpanEvent()
{
//创建一个自动复位且初始为无信号的Event
g_spanEvent = CreateEvent(NULL, FALSE, FALSE, NULL); unsigned id();
_beginthreadex(NULL, , ThreadProcSpan, NULL, , &id); while ()
{ }
}

多线程相关------事件Event的更多相关文章

  1. 多线程面试题系列(6):经典线程同步 事件Event

    上一篇中使用关键段来解决经典的多线程同步互斥问题,由于关键段的"线程所有权"特性所以关键段只能用于线程的互斥而不能用于同步.本篇介绍用事件Event来尝试解决这个线程同步问题.首先 ...

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

    原文地址:http://blog.csdn.net/morewindows/article/details/7445233 上一篇中使用关键段来解决经典的多线程同步互斥问题,由于关键段的“线程所有权” ...

  3. 转--- 秒杀多线程第六篇 经典线程同步 事件Event

    阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇 一个经典的多线程同步问题> <秒杀多线程第五篇 经典线程同步关键段CS> 上一篇中使用关键段来解决经典的多线程同步互斥问题 ...

  4. 并发编程~~~多线程~~~线程queue, 事件event,

    一 线程queue 多线程抢占资源,只能让其串行. 互斥锁 队列 import queue q = queue.Queue() # 先进先出 q = queue.LifoQueue() # 先进后出 ...

  5. (92)Wangdao.com_第二十五天_线程机制_H5 Web Workers 分线程任务_事件 Event

    浏览器内核 支撑浏览器运行的最核心的程序 IE 浏览器内核            Trident内核,也是俗称的IE内核Chrome 浏览器内核            统称为 Chromium 内核或 ...

  6. C#.NET使用Task,await,async,异步执行控件耗时事件(event),不阻塞UI线程和不跨线程执行UI更新,以及其他方式比较

    使用Task,await,async,异步执行事件(event),不阻塞UI线程和不跨线程执行UI更新 使用Task,await,async 的异步模式 去执行事件(event) 解决不阻塞UI线程和 ...

  7. Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群

    Redis总结(五)缓存雪崩和缓存穿透等问题   前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...

  8. 移动端前端常见的触摸相关事件touch、tap、swipe等整理

    前端的很多事件在PC端和浏览器端可公用,但有些事件却只在移动端产生,如触摸相关的事件 本文整理了移动端常见的一些事件,包括原生支持的click.touch.tap.swipe事件,也有定义型的gest ...

  9. 经典线程同步 事件Event

    阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇 一个经典的多线程同步问题> <秒杀多线程第五篇 经典线程同步关键段CS> 上一篇中使用关键段来解决经典的多线程同步互斥问题 ...

随机推荐

  1. PHP保留2位小数 格式化小数、浮点数

    JS保留两位小数例子 四舍五入使用函数 toFixed() <html> <head> </head> <script language="java ...

  2. 【Python】自动生成html文件查看指定目录中的所有图片

    获取本目录下的pic子目录中的所有图片(jpg,png,bmp,gif等,此处以jpg文件为例),然后生成一个image.html文件,打开该html文件即可在浏览器中查看pic子目录中的所有图片. ...

  3. js函数中this的不同含义

    1.js函数调用过程中,js线程会进入新的执行环境并创建该环境的变量对象,并添加两个变量:this和arguments,因此可以在函数中使用这两个变量.需要注意的是,this变量不能重新赋值,而arg ...

  4. 关于XSS(跨站脚本攻击)和CSRF(跨站请求伪造)

    我们常说的网络安全其实应该包括以下三方面的安全: 1.机密性,比如用户的隐私被窃取,帐号被盗,常见的方式是木马. 2.完整性,比如数据的完整,举个例子,康熙传位十四子,被当时四阿哥篡改遗诏:传位于四子 ...

  5. [Android Pro] 常用的android工具类和库

    reference to  : http://blog.csdn.net/lovexieyuan520/article/details/50614086 这篇博客主要记录我认为比较有用的Android ...

  6. codeigniter框架The URI you submitted has disallowed characters错误解决方法

    CI中URI传递参数时,出现:The URI you submitted has disallowed characters.错误 .原因:这是由于uri中存在CI不允许的字符 . 解决办法:在con ...

  7. 解决VS2015启动界面卡在白屏的处理方法

    最后,通过还原初始配置的方法:使用命令devenv /ResetSettings

  8. 比较典型的带case的group by语句

    2005-05-09 胜 2005-05-09 胜 2005-05-09 负 2005-05-09 负 2005-05-10 胜 2005-05-10 负 2005-05-10 负 如果要生成下列结果 ...

  9. linux下将不同线程绑定到不同core和cpu上——pthread_setaffinity_np

    =============================================================== linux下的单进程多线程的程序,要实现每个线程平均分配到多核cpu,主 ...

  10. java基础之——DecimalFormat格式化数字

    DecimalFormat可以用来格式化数字,例如用来设定保留多少位小数.设定数字分隔符等. 说方法之前,先介绍一下其常用的几个模式占位符: 0 一个数字# 一个数字,不包括 0. 小数的分隔符的占位 ...