该博客旨在分享IT技术心得和实际工作中遇到问题的解决方法,以下是新浪博客地址http://blog.sina.com.cn/qianyumolu,则为分享经济、行业趋势、心灵文章等,有兴趣的朋友可以踩踩,讨论分享

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

在自动重置事件对象中,当WaitSingleObject/WaitForMultipleObjects接收到SetEvent发送过来的信号后则返回WAIT_OBJECT_0,此时操作系统(待定)自动重置等待的事件对象(即自动将其设置为无信号状态。无论何时通过SetEvent发送过来的信号,只要未被接收到均不会被自动重置。但在未被接收之前可以调用ResetEvent手动重置等待的事件对象,此时等待的事件对象为无信号状态)。在手动重置事件对象中,当WaitSingleObject/WaitForMultipleObjects接收到SetEvent发送过来的信号后则返回WAIT_OBJECT_0,此时需要调用ResetEvent手动重置等待的事件对象(即手动将其设置为无信号状态)。

[cpp] view plaincopy
  1. #include <windows.h>
  2. #include <iostream>
  3. using namespace std;
  4. DWORD WINAPI ThreadProc(LPVOID lpParam);
  5. DWORD WINAPI ThreadProc2(LPVOID lpParam);
  6. DWORD g_dwThreadID;
  7. DWORD g_dwThreadID2;
  8. UINT g_nTickets = 300;
  9. HANDLE g_hEvent = NULL;
  10. int main(int argc, char* argv[])
  11. {
  12. cout << "Main thread is running." << endl;
  13. HANDLE hHandle = CreateThread(NULL, 0, ThreadProc, NULL, 0, &g_dwThreadID);
  14. HANDLE hHandle2 = CreateThread(NULL, 0, ThreadProc2, NULL, 0, &g_dwThreadID2);
  15. CloseHandle(hHandle);
  16. CloseHandle(hHandle2);
  17. g_hEvent = CreateEvent(NULL, FALSE,  TRUE, NULL);
  18. Sleep(4000);
  19. system("pause");
  20. return 0;
  21. }
  22. DWORD WINAPI ThreadProc(LPVOID lpParam)
  23. {
  24. // cout << "No." << g_dwThreadID << " thread is running." << endl;
  25. while (TRUE)
  26. {
  27. WaitForSingleObject(g_hEvent, INFINITE);
  28. if (g_nTickets > 0)
  29. {
  30. Sleep(1);
  31. cout << "No.1-" << g_dwThreadID << " sell ticket : " << g_nTickets << endl;
  32. g_nTickets--;
  33. SetEvent(g_hEvent);
  34. }
  35. else
  36. {
  37. break;
  38. }
  39. }
  40. return 0;
  41. }
  42. DWORD WINAPI ThreadProc2(LPVOID lpParam)
  43. {
  44. // cout << "No." << g_dwThreadID2 << " thread is running." << endl;
  45. while (TRUE)
  46. {
  47. WaitForSingleObject(g_hEvent, INFINITE);
  48. if (g_nTickets > 0)
  49. {
  50. Sleep(1);
  51. cout << "No.2-" << g_dwThreadID2 << " sell ticket : " << g_nTickets << endl;
  52. g_nTickets--;
  53. SetEvent(g_hEvent);
  54. }
  55. else
  56. {
  57. break;
  58. }
  59. }
  60. return 0;
  61. }

SetEvent/ResetEvent相关推荐

  1. CreateEvent() SetEvent() ResetEvent() 进程互斥

    首先介绍CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,线程锁定方面. CreateEvent 函功能描述:创建或打开一个命名的或无名的事件对象. EVENT有两种状态 ...

  2. C++事件SetEvent,ResetEvent的使用

    一.概念 创建事件: HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, // SECURITY_ATTRIBUTES结构指针,可 ...

  3. CreateEvent/SetEvent/ResetEvent和WaitForSingleObject

    1.CreateEvent 是创建windows事件的意思,作用主要用在判断线程退出,程锁定方面. 函功能描述:创建或打开一个命名的或无名的事件对象. HANDLE m_hExit; m_hExit= ...

  4. 【CreateEvent与SetEvent/ResetEvent】

    CreateEvent:创建Window事件,创建或打开一个命名的或无名的事件对象. 创建的事件有两种状态:发送信号和不发送信号: SetEvent:将事件设置为发送信号 ResetEvent:将事件 ...

  5. C++事件的建立和使用SetEvent,ResetEvent

    一.事件是很常用的多线程同步互斥机制 函数原型如下所示,一共四个参数: HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, // ...

  6. c++ 线程中CreateEvent SetEvent/ResetEvent WaitForSingleObject的使用

    HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes,   // 安全属性 BOOL bManualReset,   // 复位方式, ...

  7. CreateEvent SetEvent ResetEvent

    CreatEvent():创建一个事件对象  SetEvent():把指定事件对象的状态设置为发信号状态 ResetEvent():把指定事件对象的状态设置为不发信号状态 函数CreateEvent创 ...

  8. SetEvent()和ResetEvent()

    一.综述: SetEvent()使当前事件对象处于有信号状态,当前的这个线程可以继续执行. ResetEvent()是当前事件对象处于无信号状态,当前的线程处于睡眠状态,不能执行. 设置为TRUE就是 ...

  9. 线程中CreateEvent和SetEvent和ReSetEvent及WaitForSingleObject的用法

    概述 首先介绍CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,程锁定方面. CreateEvent:创建或打开一个命名的或无名的事件对象. EVENT有两种状态:发信号 ...

最新文章

  1. 9大数据集6大度量指标完胜,周志华等提出深度森林处理多标签学习
  2. 一图解明Android Studio项目文件结构各部分作用
  3. 2013 ACM/ICPC 长沙网络赛J题
  4. matlab 万能,matlab 万能实用的线性曲线拟合方法
  5. mvc一对多模型表单的快速构建
  6. 台达plc读取变频器电流案例_MODBUS通信之触摸屏与变频器通信知识分享(一)
  7. 红帽专家谈 Ceph 与 Gluster 开源存储路线
  8. Thinkphp 生成数据表字段缓存
  9. 基于SATI的建筑智能化最新调查与进展
  10. openv识别物体颜色
  11. 能模仿韩寒小四写作的神奇循环神经网络
  12. Form表单提交数据的几种方式
  13. 转载:Transferring Login Credentials Securely
  14. eclipse中JSP文件编写乱码问题及解决方案
  15. linkerd1.6 local安装方式文档
  16. 双向搜索(bfs,dfs)
  17. 设计一可控同步四进制可逆计数器, 其由输入X1, X2控制, 用D触发器和74151及必要的门电路实现
  18. 不习惯的 Vue3 起步五 のapiHooks 封装
  19. c语言流控制(20180710)
  20. 测试用例-——教室和椅子

热门文章

  1. 查找搜狐文章里面插入的腾讯视频
  2. Win10快速启动、待机(睡眠)、休眠、混合睡眠是什么?
  3. 微信小程序 多选单机变色
  4. 会计凭证合并OBCY
  5. 选择云原生是企业进行技术变革的必经之路
  6. linux安装软件和卸载的几种方法
  7. Matplotlib图形内的文字注释、箭头(三)
  8. 第十二届 蓝桥杯 EDA设计与开发项目 省赛
  9. 如何去黑眼圈? 不同类型黑眼圈的消除方法推荐
  10. GridView控件数据绑定