#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,FALSE,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); //等待有信号状态
Sleep(1); //则当有一个wait到它的Thread时, 该Event就会自动复位,变成无信号.
printf("ThreadProc1 %d\n",i--);
SetEvent(hEvent); //设置有信号状态
}
return 0;
}
DWORD WINAPI ThreadProc2( LPVOID lpParameter)
{
while(i>0)
{
WaitForSingleObject(hEvent,INFINITE); //等待有信号状态
Sleep(1); //则当有一个wait到它的Thread时, 该Event就会自动复位,变成无信号.
printf("ThreadProc2 %d\n",i--);
SetEvent(hEvent); //设置有信号状态
}
return 0;
}
CreateEvent自动重置事件对象
最新推荐文章于 2022-11-28 12:47:19 发布