您的位置:首页 > 其它

内核对象用于线程同步

2015-03-03 11:03 253 查看
事件内核对象

等待成功所引起的副作用,当事件对象被触发的时候,函数会检测到这一情况,这里它可以直接返回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);//自动重置事件 只触发一个

可等待的计时器对象

与事件一样,手动重置计时器被触发时,所有等待此计时器的线程变成可以高度状态,自动重置计时器被触发时,所有等待此计时器的线程中只有一个变成可以高度状态。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: