线程同步之事件同步

来源:互联网 发布:java中的观察者模式 编辑:程序博客网 时间:2024/05/20 11:19

使用事件同步,主要是一个事件句柄和五个函数:


HANDLE g_hEvent = NULL;

g_hEvent = CreateEvent(NULL, FALSE, TRUE, L"Test Event");

WaitForSingleObject(g_hEvent, INFINITE);

SetEvent(g_hEvent); 

ResetEvent(g_hEvent);

CloseHandle(g_hEvent);


示例:

// Event.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "process.h"#include "windows.h"#include "stdio.h"HANDLE g_hEvent = NULL;unsigned __stdcall thread1(void *lparam);int main(){/*参数2:指定将事件对象创建成手动复原还是自动复原。      如果是TRUE,那么必须用ResetEvent函数来手工将事件的状态复原到无信号状态。      如果设置为FALSE,当一个等待线程被释放以后,系统将会自动将事件状态复原为无信号状态。参数3:指定事件对象的初始状态。如果为TRUE,初始状态为有信号状态;否则为无信号状态。参数4:跨进程会使用到该名字参数*/g_hEvent = CreateEvent(NULL, FALSE, TRUE, L"Test Event");UINT iThreadId = 0;_beginthreadex(NULL, 0, thread1, NULL, 0, &iThreadId);_beginthreadex(NULL, 0, thread1, NULL, 0, &iThreadId);_beginthreadex(NULL, 0, thread1, NULL, 0, &iThreadId);getchar();if (g_hEvent){CloseHandle(g_hEvent);}    return 0;}void useEvent() {WaitForSingleObject(g_hEvent, INFINITE);printf("正在调用Event");/* *  SetEvent函数将状态设置为有信号,ResetEvent函数将状态设置为无信号。*  此处如果不调用SetEvent或者在最后调用ResetEvent都会使运行在该线程之后的线程等待。*/SetEvent(g_hEvent);    }unsigned __stdcall thread1(void *lparam){useEvent();return 0;}


0 0