事件

事件可以完全控制,其他无法控制线程的执行顺序,但是事件对象可以做到。
***事件(Event)***是在线程同步中最常使用的一种同步对象,事件包含一个使用计数,一个是用来表示自动重置/手动重置的布尔值,另一个是表示事件有没有触发的布尔值。
事件对象有两种状态: 1、手动状态。2、自动状态
手动状态事件对象的激发态和非激发态是由我们来控制,自动状态与互斥体类似。

事件与互斥体区别

事件对象没有拥有者的概念,谁都可以操作事件对象的状态。事件可以控制线程的执行顺序。
手动状态事件对象的激发态和非激发态是由我们来控制,自动状态与互斥体类似。
在使用正常线程创建调用回调函数时,线程的执行顺序不一定会按线程创建的顺序执行。

#include<iostream>
#include<Windows.h>LONG g_count;
HANDLE hEvent;
DWORD WINAPI myThreadProc1(_In_ LPVOID lpParameter
)
{printf("线程1执行了\n");return 0;
}DWORD WINAPI myThreadProc2(_In_ LPVOID lpParameter
)
{printf("线程2执行了\n");return 0;
}DWORD WINAPI myThreadProc3(_In_ LPVOID lpParameter
)
{printf("线程3执行了\n");return 0;
}int main()
{//hEvent = CreateEventW(NULL, FALSE, TRUE, L"dsd");HANDLE hThread1 = CreateThread(0, 0,  myThreadProc1, 0, 0,0);HANDLE hThread2 = CreateThread(0, 0,  myThreadProc2, 0, 0,0);HANDLE hThread3 = CreateThread(0, 0,  myThreadProc3, 0, 0,0);WaitForSingleObject(hThread1, -1);WaitForSingleObject(hThread2, -2);printf("%d\n", g_count);CloseHandle(hThread1);CloseHandle(hThread2);return 0;
}


而我们如果使用Event事件就可以对线程的执行顺序进行实现。

信号量


信号量也没有拥有者的概念,但是他有数量
信号量有一个当前信号数,只要这个数不为0,信号量就处于激发态。
当有线程调用WaitForSingle0bject后,信号数减1,如果不为0的话,再有线程调用
WaitForSingleObject.会继续上一把锁。相反调用ReleaseSemaphoore会将信号量加1,。如果信号量为0,当有线程调用WaitForSingleObject.时,线程会被阻塞。
使用场景:多开数量检测

操纵信号量实现游戏多开访问控制

#include<iostream>
#include<Windows.h>int main() {HANDLE hSema = OpenSemaphoreW(EVENT_ALL_ACCESS, FALSE, L"dsd");//获取信号量句柄if (!hSema)//如果没有成功打开即创建信号量,仅当CreateSemaphore创建信号灯时才会成功{hSema = CreateSemaphore(NULL, 0, 3, L"dsd");//创建或打开信号灯对象,返回信号灯句柄}BOOL hSuccess = ReleaseSemaphore(hSema,1,NULL);//如果成功信号量加1则返回TRUE,否则返回FALSEif (!hSuccess) {MessageBox(0, L"程序打开数量不能超过三个",L"提示",MB_OK);CloseHandle(hSema);return 0;}system("pause");return 0;
}

【免杀前置课——Windows编程】十三、事件与信号量——事件与互斥体区别、操纵信号量实现游戏多开访问控制(附代码)相关推荐

  1. 【免杀前置课——Windows编程】五、窗口控件——什么是控件、Windolws 窗口两大类、Windows标准控件/通用控件、控件响应的接收、创建窗口制作不同控件

    窗口控件 WINDOW控件 什么是控件? 控件是常见的窗口上的交互元素.例如:一个按钮,一个复选框,一个列表框等.当控件的特定功能被触发后,会主动发送消息通知父窗口,父窗口可以通过发送消息给控件控制控 ...

  2. 【免杀前置课——Windows编程】十、进程间通信(COPY_DATA通信,邮槽通信)、实现两进程通信(附代码)

    进程间通信 进程间通信 1.COPY_DATA方式 2.邮槽的方式 实现两进程通信 进程接收端 进程发送端 错误调试小技巧 进程间通信 每个进程都有自己独立的4G内存空间,彼此是不能直接互相访问的.如 ...

  3. 【免杀前置课——Windows编程】十四、异步IO——什么是异步IO、API定位问题、APC调用队列

    异步IO 异步IO 异步I/0注意事项: 定位问题 总解决方案 APC调用队列 异步IO 当我们读取一个文件时,一般情况下,线程是阻塞的,也就是说,当前线程在等待文件读取操作结束,这种方式叫同步IO. ...

  4. [Windows编程] C++中 bool,BOOL ,VARIANT_BOOL 的区别

    接上篇,继续讨论BOOL变量. Windows 中BOOL变量常见的好几种类型:小写的bool,大写的BOOL ,还有VARIANT_BOOL . 小写的bool 的是C++ 标准定义的布尔类型, 各 ...

  5. 【Windows】Shellcode免杀,过360、火绒、Defender 静态及主防

    Shellcode,顾名思义是一段拿来执行的代码片段,我们可以使用Shellcode来完成我们需要的任务 弹窗的代码,可以被认为是一段Shellcode,获取某个模块的基址的代码,也可以被认为是一段S ...

  6. pyinstaller打包逆向分析,顺便免杀Windows Defender

    微信公众号:乌鸦安全 扫取二维码获取更多信息! 1. python3利用shellcode免杀火绒 1.1 什么是shellcode 在攻击中,shellcode是一段用于利用软件漏洞的有效负载,sh ...

  7. 【转】RFire系列免杀教程

    RFire系列免杀教程第1到20课 RFire系列免杀教程, 木马免杀 文件名称:       [原创]RFire系列免杀教程第1课.rar 文件大小:       41.16MB 文件类型:     ...

  8. 2018-2019-2 网络对抗技术 20165303 Exp3 免杀原理与实践

    实验内容 一. 正确使用msf编码器(0.5分),msfvenom生成如jar之类的其他文件(0.5分),veil-evasion(0.5分),加壳工具(0.5分),使用shellcode编程(1分) ...

  9. Windows 编程

    Delphi 利用Object Pascal 和可视控件库(VCL)对底层的Windows API 进行了完美的封装,所以很少需要使用基础Pascal 语言来建立Windows应用程序,也无需直接调用 ...

最新文章

  1. sqlalchemy根据表名动态创建model类
  2. 十张图看懂SDN与NFV的区别与联系?
  3. 深入分析 iBATIS 框架之系统架构与映射原理--转载
  4. 轻松搞定javascript变量(闭包,预解析机制,变量在内存的分配 )
  5. java项目启动时登录,Java项目启动时报错解决方法
  6. C++编程调试秘笈(第1次阅读)
  7. javascript 代码_如何开始对JavaScript代码进行单元测试
  8. 在上级对自己做绩效评估之前
  9. python tkinter 中文文档_Python实现中文文档的简体与繁体互相转换
  10. Google 面试题和详解
  11. 第二节: 外部中断学习(用CubeMX学习STM32)
  12. 读论文 + 总结 + 笔记
  13. 手把手教你学51单片机_第四、五章
  14. 计算机abc分类法,ABC分类法.ppt
  15. DoTWeen常用方法
  16. python图像数字识别
  17. 书摘---创业36条军规8:资本的五个问题
  18. 机器人编程要学哪些知识
  19. 苹果cms v10影视网站安装海螺主题模板
  20. LDU暑假集训(十)1209 Problem I NEW RDSP MODE I

热门文章

  1. 微投抖的1080_追剧利器 1080P的微投居然不到3000元
  2. java word 文档合并_如何通过java将多个word文档合成一个wor
  3. 基于VNTchain实现的学历认证系统
  4. CSGO社区服务器搭建架设服务器配置以及环境准备
  5. devos勒索病毒解决方法|勒索病毒解密|勒索病毒恢复|数据库修复
  6. 不再依赖直播,陌陌下一步棋怎么走?
  7. 性能深度分析之SystemTrace
  8. 斯伦贝谢好进吗_你知道斯伦贝谢中国软件家族吗?请进!
  9. 一排里的位置交换 围成圈 十进制整数转二进制 进出栈 栈容量 自创语言 离队 入队
  10. 基于SSM手机考勤安卓APP