线程同步之事件同步

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


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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值