事件内核对象

等待成功所引起的副作用,当事件对象被触发的时候,函数会检测到这一情况,这里它可以直接返回WAIT_OBJECT_0给调用线程,但是在函数返回之前,
它会使事件变为非触发状态---这就是副作用,进程、线程没有这样的副作用。其他对象有不同的副作用。
PluseEvent 相当于SetEvent + ResetEvent

#include <iostream>
#include <Windows.h>
#include <process.h>HANDLE g_event;
unsigned __stdcall _StartAddress1 (void *)
{WaitForSingleObject(g_event,INFINITE);std::cout<<"_StartAddress1"<<std::endl;return 0;
}
unsigned __stdcall _StartAddress2 (void *)
{WaitForSingleObject(g_event,INFINITE);std::cout<<"_StartAddress2"<<std::endl;return 0;
}
unsigned __stdcall _StartAddress3 (void *)
{WaitForSingleObject(g_event,INFINITE);std::cout<<"_StartAddress3"<<std::endl;return 0;
}void main()
{g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件//g_event = CreateEvent(NULL,FALSE,FALSE,NULL);//自动重置事件_beginthreadex(NULL,0,_StartAddress1,NULL,0,NULL);_beginthreadex(NULL,0,_StartAddress2,NULL,0,NULL);_beginthreadex(NULL,0,_StartAddress3,NULL,0,NULL);Sleep(1);//SetEvent(g_event);PulseEvent(g_event);getchar();CloseHandle(g_event);
}

g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件  将触发所有

g_event = CreateEvent(NULL,FALSE,FALSE,NULL);//自动重置事件  只触发一个

可等待的计时器对象

与事件一样,手动重置计时器被触发时,所有等待此计时器的线程变成可以高度状态,自动重置计时器被触发时,所有等待此计时器的线程中只有一个变成可以高度状态。

内核对象用于线程同步相关推荐

  1. 线程同步——内核对象实现线程同步——等待函数

    1 对于内核对象实现线程同步,不得不提三点: 2 1)大多数内核对象既有触发也有未触发两个状态 3 比如:进程.线程.作业.文件流.事件.可等待的计时器.信号量.互斥量 4 2)等待函数:等待函数使线 ...

  2. Windows核心编程:第9章 用内核对象进行线程同步

    Github https://github.com/gongluck/Windows-Core-Program.git //第9章 用内核对象进行线程同步.cpp: 定义应用程序的入口点. //#in ...

  3. 《Windows via C/C++》学习笔记 —— 内核对象的“线程同步”之“信号量”

    "信号量内核对象"用于对资源进行计数. 在信号量内核对象内部,和其他内核对象一样,有一个使用计数,该使用计数表示信号量内核对象被打开的次数. 信号量内核对象中还有两个比较重要的数据 ...

  4. 用内核对象进行线程同步

    本章讨论的是如何使用内核对象来对线程进行同步,与用户模式下的同步机制相比,内核对象的用途要广泛的多.实际上,内核对象唯一的缺点就是他们的性能.当我们调用本章任何一个新函数时,调用线程必须从用户模式切换 ...

  5. Windows核心编程学习九:利用内核对象进行线程同步

    注:源码为学习<Windows核心编程>的一些尝试,非原创.若能有助于一二访客,幸甚. 1.程序框架 #include "Queue.h" #include <t ...

  6. Python使用BoundedSemaphore对象进行线程同步

    Semaphore对象维护着一个内部计数器,调用acquire()方法时该计数器减1,调用release()方法时该计数器加1,适用于需要控制特定资源的并发访问线程数量的场合. 调用acquire() ...

  7. Windows核心编程 第九章 线程与内核对象的同步(下)

    9.4 等待定时器内核对象 等待定时器是在某个时间或按规定的间隔时间发出自己的信号通知的内核对象.它们通常用来在某个时间执行某个操作. 若要创建等待定时器,只需要调用C r e a t e Wa i ...

  8. MFC 多线程及线程同步

    一.MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程.二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环. 工作者线程没有消息机制,通常 ...

  9. VC++ MFC 多线程及线程同步(详细、全面总结!)

    更多详情:http://blog.csdn.net/whyacinth/ VC++ MFC 多线程及线程同步 关键词: MFC    多线程及线程同步                          ...

最新文章

  1. WSS 代码执行的权限提升
  2. Powershell查看AD 组成员的变化
  3. 【C++】智能指针 Smart Pointer
  4. 百练2757:最长上升子序列
  5. centos下搭建网站服务器,Centos7搭建web服务器
  6. 应用新的JDK 11字符串方法
  7. JAVA多线程与并发学习总结
  8. Jmeter模拟加密密码登录
  9. PHP+MYSQL 出现乱码的解决方法
  10. BS与CS的联系与区别【简】
  11. mysql查询每十分钟的数据_sql查询语句查询每10分钟的数据
  12. PaddleNLP--UIE(二)--小样本快速提升性能(含doccona标注)
  13. 解决Requirement already satisfied:问题
  14. mysql查看sa密码_sqlserver怎么查看sa密码
  15. 回归A股成“网红”,中芯国际20年芯片发展史
  16. 【linux 释放内存】linux释放内存骚操作
  17. Android项目开发如何设计整体架构?大牛最佳总结
  18. Java—通过sign签名认证实现安全的开放接口API
  19. 服务器虚拟机光驱,vSphere client中的光驱配置方式
  20. 开源激光SLAM项目BLAM-----1

热门文章

  1. 在Python中使用lightgbm
  2. 关于OpenGL环境配置问题(2015)
  3. Agiliq署名的免费python书籍
  4. 查看dll 的是32位还是64位
  5. vnc--centos 7 安装和配置
  6. 剑指Offer_17_树的子结构
  7. std::string 用法
  8. Heartbeat,来点真的
  9. 关于4.8节第一个例子
  10. STM32中断优先级和开关总中断(很老很经典)