内核对象用于线程同步

事件内核对象

等待成功所引起的副作用,当事件对象被触发的时候,函数会检测到这一情况,这里它可以直接返回WAIT_OBJECT_0给调用线程,但是在函数返回之前,
它会使事件变为非触发状态---这就是副作用,进程、线程没有这样的副作用。其他对象有不同的副作用。
PluseEvent 相当于SetEvent + ResetEvent

#include <iostream>
#include <Windows.h>
#include <process.h>

HANDLE g_event;
unsigned __stdcall _StartAddress1 (void *)
{
	WaitForSingleObject(g_event,INFINITE);
	std::cout<<"_StartAddress1"<<std::endl;
	return 0;
}
unsigned __stdcall _StartAddress2 (void *)
{
	WaitForSingleObject(g_event,INFINITE);
	std::cout<<"_StartAddress2"<<std::endl;
	return 0;
}
unsigned __stdcall _StartAddress3 (void *)
{
	WaitForSingleObject(g_event,INFINITE);
	std::cout<<"_StartAddress3"<<std::endl;
	return 0;
}

void main()
{
	g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件
	//g_event = CreateEvent(NULL,FALSE,FALSE,NULL);//自动重置事件
	_beginthreadex(NULL,0,_StartAddress1,NULL,0,NULL);
	_beginthreadex(NULL,0,_StartAddress2,NULL,0,NULL);
	_beginthreadex(NULL,0,_StartAddress3,NULL,0,NULL);

	Sleep(1);
	//SetEvent(g_event);
	PulseEvent(g_event);
	
	getchar();
	CloseHandle(g_event);
}


g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件g_event = CreateEvent(NULL,TRUE,FALSE,NULL);//手动重置事件  将触发所有

g_event = CreateEvent(NULL,FALSE,FALSE,NULL);//自动重置事件  只触发一个

 

可等待的计时器对象

与事件一样,手动重置计时器被触发时,所有等待此计时器的线程变成可以高度状态,自动重置计时器被触发时,所有等待此计时器的线程中只有一个变成可以高度状态。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值