Event多线程同步演示
来源:互联网 发布:php登录次数 编辑:程序博客网 时间:2024/05/19 11:49
通过这个简单的示例进行可以很快学习了解Event的用法.
#include "stdafx.h"#include <windows.h>#include <stdio.h>#include "iostream"#include "process.h"#define THREADCOUNT 10 HANDLE ghWriteEvent; HANDLE ghMutex;HANDLE ghThreads[THREADCOUNT];DWORD WINAPI ThreadProc(LPVOID);void CreateEventsAndThreads(void) { int i; DWORD dwThreadID; ghMutex = CreateMutex(NULL, FALSE, NULL); ghWriteEvent = CreateEvent( NULL, FALSE,TRUE, TEXT("WriteEvent")); if (ghWriteEvent == NULL) { printf("CreateEvent failed (%d)\n", GetLastError()); return; } for(i = 0; i < THREADCOUNT; i++) { ghThreads[i] = CreateThread(NULL, 0, ThreadProc, NULL, 0, &dwThreadID); if (ghThreads[i] == NULL) { printf("CreateThread failed (%d)\n", GetLastError()); return; } }}void WriteToBuffer(VOID) { printf("Main thread writing to the shared buffer...\n"); if (! SetEvent(ghWriteEvent) ) { printf("SetEvent failed (%d)\n", GetLastError()); return; }}void CloseEvents() { CloseHandle(ghWriteEvent);}void main(){ DWORD dwWaitResult; CreateEventsAndThreads(); //WriteToBuffer(); printf("Main thread waiting for threads to exit...\n"); dwWaitResult = WaitForMultipleObjects(THREADCOUNT, ghThreads, TRUE, INFINITE); switch (dwWaitResult) { case WAIT_OBJECT_0: printf("All threads ended, cleaning up for application exit...\n"); break; default: printf("WaitForMultipleObjects failed (%d)\n", GetLastError()); return; } CloseEvents();}DWORD WINAPI ThreadProc(LPVOID lpParam) { DWORD dwWaitResult; printf("Thread %d waiting for write event...\n", GetCurrentThreadId()); Sleep(100); dwWaitResult = WaitForSingleObject(ghWriteEvent, INFINITE); Sleep(100); printf("Thread %d waiting for write event2...\n", GetCurrentThreadId()); dwWaitResult = WaitForSingleObject(ghWriteEvent, INFINITE); switch (dwWaitResult) { case WAIT_OBJECT_0: printf("Thread %d reading from buffer\n", GetCurrentThreadId()); break; default: printf("Wait error (%d)\n", GetLastError()); return 0; } Sleep(100); printf("Thread %d exiting\n", GetCurrentThreadId()); return 1;}#include "stdafx.h"#include <windows.h>#include <stdio.h>#include "iostream"#include "process.h"#define THREADCOUNT 10 HANDLE ghWriteEvent; HANDLE ghMutex;HANDLE ghThreads[THREADCOUNT];DWORD WINAPI ThreadProc(LPVOID);void CreateEventsAndThreads(void) { int i; DWORD dwThreadID; ghMutex = CreateMutex(NULL, FALSE, NULL); ghWriteEvent = CreateEvent( NULL, FALSE,TRUE, TEXT("WriteEvent")); if (ghWriteEvent == NULL) { printf("CreateEvent failed (%d)\n", GetLastError()); return; } for(i = 0; i < THREADCOUNT; i++) { ghThreads[i] = CreateThread(NULL, 0, ThreadProc, NULL, 0, &dwThreadID); if (ghThreads[i] == NULL) { printf("CreateThread failed (%d)\n", GetLastError()); return; } }}void WriteToBuffer(VOID) { printf("Main thread writing to the shared buffer...\n"); if (! SetEvent(ghWriteEvent) ) { printf("SetEvent failed (%d)\n", GetLastError()); return; }}void CloseEvents() { CloseHandle(ghWriteEvent);}void main(){ DWORD dwWaitResult; CreateEventsAndThreads(); //WriteToBuffer(); printf("Main thread waiting for threads to exit...\n"); dwWaitResult = WaitForMultipleObjects(THREADCOUNT, ghThreads, TRUE, INFINITE); switch (dwWaitResult) { case WAIT_OBJECT_0: printf("All threads ended, cleaning up for application exit...\n"); break; default: printf("WaitForMultipleObjects failed (%d)\n", GetLastError()); return; } CloseEvents();}DWORD WINAPI ThreadProc(LPVOID lpParam) { DWORD dwWaitResult; printf("Thread %d waiting for write event...\n", GetCurrentThreadId()); Sleep(100); dwWaitResult = WaitForSingleObject(ghWriteEvent, INFINITE); Sleep(100); printf("Thread %d waiting for write event2...\n", GetCurrentThreadId()); dwWaitResult = WaitForSingleObject(ghWriteEvent, INFINITE); switch (dwWaitResult) { case WAIT_OBJECT_0: printf("Thread %d reading from buffer\n", GetCurrentThreadId()); break; default: printf("Wait error (%d)\n", GetLastError()); return 0; } Sleep(100); printf("Thread %d exiting\n", GetCurrentThreadId()); return 1;}
阅读全文
0 0
- Event多线程同步演示
- 多线程--同步(事件Event)
- 多线程同步-event
- Event 多线程 同步
- VS2015 多线程同步 Event
- c++ 多线程同步Event例子
- 多线程同步(C++)event
- JAVA多线程与单列模式--同步演示
- Windows中多线程同步之事件(Event)
- 多线程同步之Event(事件对象)
- 多线程6:经典线程同步 事件Event
- 多线程第四篇:event线程同步
- c++ 多线程中的线程同步--Event
- C++多线程同步之事件(Event)
- 多线程编程3-----演示多线程未同步问题
- 多线程编程(13) - 多线程同步之 Event (事件对象)
- 一个演示多线程操作及同步的C#程序
- 一个演示多线程操作及同步的C#程序
- 消息队列的使用场景
- mybatis使用
- 前端面试题-长沙
- C++中String类的实现
- GIT命令符收集
- Event多线程同步演示
- 文件与文件夹
- java SE day14 火推
- lesson5-2
- C、C++中字符串和字符指针之间的转换
- kudu和kudu-impala的安装流程
- 监听tab键 是光标只在两个input中切换 监听回车键
- quartz2.2.3 spring整合遇到的错误,及quartz配置文件说明
- 最简实例说明wait、notify、notifyAll的使用