c++多线程重点难点(五)Event
来源:互联网 发布:透视镜软件下载 编辑:程序博客网 时间:2024/05/22 13:42
1.事件是内核对象,事件分为手动置位事件和自动置位事件。事件Event内部它包含一个使用计数(所有内核对象都有),一个布尔值表示是手动置位事件还是自动置位事件,另一个布尔值用来表示事件有无触发。
(1).对于手动置位事件,所有正处于等待状态下线程都变成可调度状态。
(2).对于自动置位事件,所有正处于等待状态下线程只有一个变成可调度状态。
2.事件可以由SetEvent()来触发,由ResetEvent()来设成未触发。还可以由PulseEvent()来发出一个事件脉冲。
3.事件可以解决线程间同步问题,因此也能解决互斥问题
接下来介绍一下常用的函数:
创建事件CreateEvent()
打开事件OpenEvent()
触发事件SetEvent()
设置事件为未触发ResetEvent()
最后一个事件的清理与销毁
由于事件是内核对象,因此使用CloseHandle()就可以完成清理与销毁了。
下面是Event的一个例子:
#include <stdio.h>#include <process.h>#include <windows.h>long g_nNum;unsigned int __stdcall Fun(void *pPM);const int THREAD_NUM = 10;//事件与关键段HANDLE g_hThreadEvent;CRITICAL_SECTION g_csThreadCode;int main(){ printf(" 经典线程同步 事件Event\n"); printf(" -- by MoreWindows( http://blog.csdn.net/MoreWindows ) --\n\n"); //初始化事件和关键段 自动置位,初始无触发的匿名事件 g_hThreadEvent = CreateEvent(NULL, FALSE, FALSE, NULL); InitializeCriticalSection(&g_csThreadCode); HANDLE handle[THREAD_NUM]; g_nNum = 0; int i = 0; while (i < THREAD_NUM) { handle[i] = (HANDLE)_beginthreadex(NULL, 0, Fun, &i, 0, NULL); WaitForSingleObject(g_hThreadEvent, INFINITE); //等待事件被触发 i++; } WaitForMultipleObjects(THREAD_NUM, handle, TRUE, INFINITE); //销毁事件和关键段 CloseHandle(g_hThreadEvent); DeleteCriticalSection(&g_csThreadCode); return 0;}unsigned int __stdcall Fun(void *pPM){ int nThreadNum = *(int *)pPM; SetEvent(g_hThreadEvent); //触发事件 Sleep(50);//some work should to do EnterCriticalSection(&g_csThreadCode); g_nNum++; Sleep(0);//some work should to do printf("线程编号为%d 全局资源值为%d\n", nThreadNum, g_nNum); LeaveCriticalSection(&g_csThreadCode); return 0;}
更多详细内容请查阅原文:http://blog.csdn.net/morewindows/article/details/7445233
阅读全文
1 0
- c++多线程重点难点(五)Event
- C++多线程重点难点(二)理解
- c++多线程重点难点(三)Mutex
- c++多线程重点难点(四)semaphore
- 多线程同步(C++)event
- c++多线程重点难点(一)interlocked系列原子操作
- c++多线程重点难点(六)CriticalSection
- 多线程五 经典线程同步之事件Event
- 多线程五 经典线程同步之事件Event
- 多线程五 经典线程同步之事件Event
- c/c++: 多线程编程基础讲解(五)
- c/c++: 多线程编程基础讲解(五)
- 【C#】事件(Event)
- Event多线程
- 多线程---event
- 多线程Event
- linux下C语言多线程(五)杂项函数
- C++:多线程类库的设计与实现(五)
- 小而美的 React Form 组件
- 涂图滤镜,让你好看
- 535. Encode and Decode TinyURL
- 处理数据库无打开问题
- 测试
- c++多线程重点难点(五)Event
- 小程序字体 text 多种属性样式
- python 机器学习中各种距离
- 802.11 Backoff Timer,bugFix_timer_
- table的表头固定--上下滚动表头固定,左右滚动跟随滚动
- LeetCode笔记(1-10)?4,5,10
- Activity的生命周期和启动模式
- 最小生成树之普里姆算法
- Linux系统上安装VMware Workstation