#include <stdio.h>
#include <windows.h>
/*
人工重置的事件对象有信号状态,所有的线程都可以运行ResetEvent
自动重置的事件对象有信号状态,所有的线程只有一个变为可调度线程
*/
DWORD WINAPI ThreadProc1( LPVOID lpParameter);
DWORD WINAPI ThreadProc2( LPVOID lpParameter);
HANDLE hEvent=NULL;
int i=100;
int main( void )
{
hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); //人工重置事件对象---无信号状态
SetEvent(hEvent); //设置事件有信号状态
HANDLE hThread[2]={0};
hThread[0]=CreateThread(NULL,NULL,ThreadProc1,NULL,NULL,NULL);
hThread[1]=CreateThread(NULL,NULL,ThreadProc2,NULL,NULL,NULL);
CloseHandle(hThread[0]);
CloseHandle(hThread[1]);
getchar();
CloseHandle(hEvent);
return 0;
}
DWORD WINAPI ThreadProc1( LPVOID lpParameter)
{
while (i>0)
{
WaitForSingleObject(hEvent,INFINITE); //等待有信号状态
ResetEvent(hEvent);
Sleep(1);
printf("ThreadProc1 %d\n",i--);
SetEvent(hEvent);
Sleep(1);
}
return 0;
}
DWORD WINAPI ThreadProc2( LPVOID lpParameter)
{
while(i>0)
{
WaitForSingleObject(hEvent,INFINITE); //等待有信号状态
ResetEvent(hEvent);
Sleep(1);
printf("ThreadProc2 %d\n",i--);
SetEvent(hEvent);
Sleep(1);
}
return 0;
}
CreateEvent人工重置事件对象
最新推荐文章于 2024-01-08 17:19:45 发布