代码如下:
//使用PluseEvent()函数
#include<stdio.h>
#include<conio.h>
#include<process.h>
#include<windows.h>
HANDLEg_hThreadEvent;
//快线程
unsignedint__stdcallFastThreadFun(void*pPM)
{
Sleep(10);//用这个来保证各线程调用等待函数的次序有一定的随机性
printf("%s启动\n",(PSTR)pPM);
WaitForSingleObject(g_hThreadEvent,INFINITE);
printf("%s等到事件被触发顺利结束\n",(PSTR)pPM);
return0;
}
//慢线程
unsignedint__stdcallSlowThreadFun(void*pPM)
{
Sleep(100);
printf("%s启动\n",(PSTR)pPM);
WaitForSingleObject(g_hThreadEvent,INFINITE);
printf("%s等到事件被触发顺利结束\n",(PSTR)pPM);
return0;
}
intmain()
{
printf("使用PluseEvent()函数\n");
printf("--byMoreWindows()--\n\n");
BOOLbManualReset=FALSE;
//创建事件第二个参数手动置位TRUE,自动置位FALSE
g_hThreadEvent=CreateEvent(NULL,bManualReset,FALSE,NULL);
if(bManualReset==TRUE)
printf("当前使用手动置位事件\n");
else
printf("当前使用自动置位事件\n");
charszFastThreadName[5][30]={"快线程1000","快线程1001","快线程1002","快线程1003","快线程1004"};
charszSlowThreadName[2][30]={"慢线程196","慢线程197"};
inti;
for(i=0;i<5;i++)
_beginthreadex(NULL,0,FastThreadFun,szFastThreadName[i],0,NULL);
for(i=0;i<2;i++)
_beginthreadex(NULL,0,SlowThreadFun,szSlowThreadName[i],0,NULL);
Sleep(50);//保证快线程已经全部启动
printf("现在主线程触发一个事件脉冲-PulseEvent()\n");
PulseEvent(g_hThreadEvent);//调用PulseEvent()就相当于同时调用下面二句
//SetEvent(g_hThreadEvent);
//ResetEvent(g_hThreadEvent);
Sleep(3000);
printf("时间到,主线程结束运行\n");
CloseHandle(g_hThreadEvent);
return0;
}
对自动置位事件,运行结果如下:

对手动置位事件,运行结果如下:

最后总结下事件Event
1.事件是内核对象,事件分为手动置位事件和自动置位事件。事件Event内部它包含一个使用计数(所有内核对象都有),一个布尔值表示是手动置位事件还是自动置位事件,另一个布尔值用来表示事件有无触发。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33747-11.html
加油吧