事件对象分为两类:人工重置事件对象和自动重置事件对象。
对于人工重置事件对象,可以同时有多个线程等待到事件对象,成为可调度线程。
对于自动重置事件对象,等待该事件对象的多个线程只能有一个线程成为可调度线程。此外,如果事件对象为自动重置事件对象,当某个线程等待到事件对象后,系统将自动将事件对象设置为未通知对象...
#include "windows.h" #include <iostream> int number = 1; HANDLE hEvent; unsigned long _stdcall ThreadProc1(void *lpParameter) //线程1 { while (number < 100) { WaitForSingleObject(hEvent, INFINITE); std::cout << "线程1当前计数:" <<number<<std::endl; number++; Sleep(100); SetEvent(hEvent);//设置事件为有信号状态; } return 0; } unsigned long _stdcall ThreadProc2(void *lpParameter) //线程2 { while (number < 100) { WaitForSingleObject(hEvent, INFINITE); std::cout << "线程2当前计数:" << number << std::endl; number++; Sleep(1000); SetEvent(hEvent); } return 0; } int main(int argc, char *argv[]) { HANDLE hThread1 = CreateThread(NULL, 0, ThreadProc1, NULL, 0, NULL); HANDLE hThread2 = CreateThread(NULL, 0, ThreadProc2, NULL, 0, NULL); hEvent = CreateEvent(NULL, FALSE, TRUE, "event"); CloseHandle(hThread1); CloseHandle(hThread2); while (true) { ; } return 0; }