Windows多线程程序设计之线程同步分析(结合事件对象)(下)
来源:互联网 发布:悟 无人机 知乎 编辑:程序博客网 时间:2024/05/09 20:59
本篇介绍命名的事件对象, 命名的事件对象的功能和原理其实和命名的互斥对象的功能和原理差不错, 所以在此篇中就不在进行详细的说明了, 如有疑问请看我的《Windows多线程程序设计之线程同步分析(结合互斥对象)(下)》连接地址:点击打开链接, 在这里我只给出相应的代码,如下:
#include <windows.h>#include <iostream>using namespace std ;DWORD WINAPI ThreadProc1(LPVOID lpParameter) ;DWORD WINAPI ThreadProc2(LPVOID lpParameter) ;int tickets = 100 ;HANDLE g_hEvent ;int main(){HANDLE hThread1 ;HANDLE hThread2 ;hThread1 = CreateThread(NULL, 0, ThreadProc1, NULL, 0, NULL) ;hThread2 = CreateThread(NULL, 0, ThreadProc2, NULL, 0, NULL) ;CloseHandle(hThread1) ;CloseHandle(hThread2) ;g_hEvent = CreateEvent(NULL, FALSE, FALSE, "ticket") ;// 创建一个命名的自动重置的事件对象, 并且将初始化状态设置为非信号态if (g_hEvent){if (ERROR_ALREADY_EXISTS == GetLastError()){cout << "only instance can run!" << endl ;return 0 ;}}SetEvent(g_hEvent) ;// 设置事件对象的状态为信号态Sleep(4000) ;CloseHandle(g_hEvent) ;return 0 ;}DWORD WINAPI ThreadProc1(LPVOID lpParameter){while (TRUE){WaitForSingleObject(g_hEvent, INFINITE) ;if (tickets > 0){Sleep(1) ;cout << "thread one sell ticket: " << tickets-- << endl ;}else {break ;}SetEvent(g_hEvent) ;// 设置事件对象的状态为信号态}return 0 ;}DWORD WINAPI ThreadProc2(LPVOID lpParameter){ while (TRUE) {WaitForSingleObject(g_hEvent, INFINITE) ;if (tickets > 0){Sleep(1) ;cout << "thread two sell ticket: " << tickets-- << endl ;}else {break ;}SetEvent(g_hEvent) ;// 设置事件对象的状态为信号态 } return 0 ;}最后的运行结果和《Windows多线程程序设计之线程同步分析(结合互斥对象)(下)》中的运行结果是一样的, 这里就不给出了, 结合这分析。
- Windows多线程程序设计之线程同步分析(结合事件对象)(下)
- Windows多线程程序设计之线程同步分析(结合事件对象)(上)
- Windows多线程程序设计之线程同步分析(结合互斥对象)(下)
- Windows多线程程序设计之线程同步分析(结合互斥对象)(上)
- Windows多线程程序设计之线程同步分析(结合互斥对象)(中)
- Windows多线程程序设计之线程同步分析(结合临界区(关键代码段))
- 白话windows多线程同步之事件对象
- windows多线程同步之事件对象
- 多线程同步之Event(事件对象)
- windows下多线程同步(利用事件对象,互斥对象,关键代码段)实现
- Windows多线程(四) 经典线程同步 事件Event
- 线程同步之事件对象(类比互斥对象进行分析)
- windows多线程系列003 利用事件对象实现线程同步
- 【windows】线程同步 - 事件对象
- Windows多线程总结(3)-- 线程同步(使用互斥对象实现线程同步)
- Windows多线程同步系列之三-----事件对象
- 多线程程序设计之创建线程(Windows下C++实现)
- 线程的同步互斥之事件对象(Event)
- eclipse连接小米2调试程序的问题
- Android 设备编译方法
- 谈23种设计模式
- Visual C++中的ADO编程
- for循环详解
- Windows多线程程序设计之线程同步分析(结合事件对象)(下)
- oracle 的关于sql* plus 的语法 ----SQL*Plus常用命令
- Windows系统架构
- Ajax.ActionLink 用法
- java多态性总结
- Asp.net技巧:gridview获取当前行索引的方法
- Ubuntu下VMware Tools安装教程
- C#学习笔记(3)
- MySQL日期类型 待完成