SetEvent/ResetEvent
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
在自动重置事件对象中,当WaitSingleObject/WaitForMultipleObjects接收到SetEvent发送过来的信号后则返回WAIT_OBJECT_0,此时操作系统(待定)自动重置等待的事件对象(即自动将其设置为无信号状态。无论何时通过SetEvent发送过来的信号,只要未被接收到均不会被自动重置。但在未被接收之前可以调用ResetEvent手动重置等待的事件对象,此时等待的事件对象为无信号状态)。在手动重置事件对象中,当WaitSingleObject/WaitForMultipleObjects接收到SetEvent发送过来的信号后则返回WAIT_OBJECT_0,此时需要调用ResetEvent手动重置等待的事件对象(即手动将其设置为无信号状态)。
- #include <windows.h>
- #include <iostream>
- using namespace std;
- DWORD WINAPI ThreadProc(LPVOID lpParam);
- DWORD WINAPI ThreadProc2(LPVOID lpParam);
- DWORD g_dwThreadID;
- DWORD g_dwThreadID2;
- UINT g_nTickets = 300;
- HANDLE g_hEvent = NULL;
- int main(int argc, char* argv[])
- {
- cout << "Main thread is running." << endl;
- HANDLE hHandle = CreateThread(NULL, 0, ThreadProc, NULL, 0, &g_dwThreadID);
- HANDLE hHandle2 = CreateThread(NULL, 0, ThreadProc2, NULL, 0, &g_dwThreadID2);
- CloseHandle(hHandle);
- CloseHandle(hHandle2);
- g_hEvent = CreateEvent(NULL, FALSE, TRUE, NULL);
- Sleep(4000);
- system("pause");
- return 0;
- }
- DWORD WINAPI ThreadProc(LPVOID lpParam)
- {
- // cout << "No." << g_dwThreadID << " thread is running." << endl;
- while (TRUE)
- {
- WaitForSingleObject(g_hEvent, INFINITE);
- if (g_nTickets > 0)
- {
- Sleep(1);
- cout << "No.1-" << g_dwThreadID << " sell ticket : " << g_nTickets << endl;
- g_nTickets--;
- SetEvent(g_hEvent);
- }
- else
- {
- break;
- }
- }
- return 0;
- }
- DWORD WINAPI ThreadProc2(LPVOID lpParam)
- {
- // cout << "No." << g_dwThreadID2 << " thread is running." << endl;
- while (TRUE)
- {
- WaitForSingleObject(g_hEvent, INFINITE);
- if (g_nTickets > 0)
- {
- Sleep(1);
- cout << "No.2-" << g_dwThreadID2 << " sell ticket : " << g_nTickets << endl;
- g_nTickets--;
- SetEvent(g_hEvent);
- }
- else
- {
- break;
- }
- }
- return 0;
- }
SetEvent/ResetEvent相关推荐
- CreateEvent() SetEvent() ResetEvent() 进程互斥
首先介绍CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,线程锁定方面. CreateEvent 函功能描述:创建或打开一个命名的或无名的事件对象. EVENT有两种状态 ...
- C++事件SetEvent,ResetEvent的使用
一.概念 创建事件: HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, // SECURITY_ATTRIBUTES结构指针,可 ...
- CreateEvent/SetEvent/ResetEvent和WaitForSingleObject
1.CreateEvent 是创建windows事件的意思,作用主要用在判断线程退出,程锁定方面. 函功能描述:创建或打开一个命名的或无名的事件对象. HANDLE m_hExit; m_hExit= ...
- 【CreateEvent与SetEvent/ResetEvent】
CreateEvent:创建Window事件,创建或打开一个命名的或无名的事件对象. 创建的事件有两种状态:发送信号和不发送信号: SetEvent:将事件设置为发送信号 ResetEvent:将事件 ...
- C++事件的建立和使用SetEvent,ResetEvent
一.事件是很常用的多线程同步互斥机制 函数原型如下所示,一共四个参数: HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, // ...
- c++ 线程中CreateEvent SetEvent/ResetEvent WaitForSingleObject的使用
HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, // 安全属性 BOOL bManualReset, // 复位方式, ...
- CreateEvent SetEvent ResetEvent
CreatEvent():创建一个事件对象 SetEvent():把指定事件对象的状态设置为发信号状态 ResetEvent():把指定事件对象的状态设置为不发信号状态 函数CreateEvent创 ...
- SetEvent()和ResetEvent()
一.综述: SetEvent()使当前事件对象处于有信号状态,当前的这个线程可以继续执行. ResetEvent()是当前事件对象处于无信号状态,当前的线程处于睡眠状态,不能执行. 设置为TRUE就是 ...
- 线程中CreateEvent和SetEvent和ReSetEvent及WaitForSingleObject的用法
概述 首先介绍CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,程锁定方面. CreateEvent:创建或打开一个命名的或无名的事件对象. EVENT有两种状态:发信号 ...
最新文章
- 9大数据集6大度量指标完胜,周志华等提出深度森林处理多标签学习
- 一图解明Android Studio项目文件结构各部分作用
- 2013 ACM/ICPC 长沙网络赛J题
- matlab 万能,matlab 万能实用的线性曲线拟合方法
- mvc一对多模型表单的快速构建
- 台达plc读取变频器电流案例_MODBUS通信之触摸屏与变频器通信知识分享(一)
- 红帽专家谈 Ceph 与 Gluster 开源存储路线
- Thinkphp 生成数据表字段缓存
- 基于SATI的建筑智能化最新调查与进展
- openv识别物体颜色
- 能模仿韩寒小四写作的神奇循环神经网络
- Form表单提交数据的几种方式
- 转载:Transferring Login Credentials Securely
- eclipse中JSP文件编写乱码问题及解决方案
- linkerd1.6 local安装方式文档
- 双向搜索(bfs,dfs)
- 设计一可控同步四进制可逆计数器, 其由输入X1, X2控制, 用D触发器和74151及必要的门电路实现
- 不习惯的 Vue3 起步五 のapiHooks 封装
- c语言流控制(20180710)
- 测试用例-——教室和椅子