事件内核对象
等待成功所引起的副作用,当事件对象被触发的时候,函数会检测到这一情况,这里它可以直接返回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);//自动重置事件 只触发一个
可等待的计时器对象
与事件一样,手动重置计时器被触发时,所有等待此计时器的线程变成可以高度状态,自动重置计时器被触发时,所有等待此计时器的线程中只有一个变成可以高度状态。