19.事件
- 创建事件
1 HANDLE event[3] = { 0 };
- 创建线程
1 HANDLE hthread[3] = { 0 };
- 事件初始化
1 event[0] = CreateEvent(NULL, TRUE, FALSE, NULL); 2 //第一个参数,指定一个结构,用于设置对象的安全特性 3 //第二个参数,如果为TRUE,表示创建一个人工重设事件,如果为FALSE,创建一个自动重设事件 4 //第三个参数,如事件应内部进入触发状态,则为TRUE 5 //第四个参数,指定事件对象的名字,NULL为匿名
- 创建线程
1 hthread[0] = CreateThread(NULL, 0, firstthread, NULL, 0, NULL); 2 hthread[1] = CreateThread(NULL, 0, secondthread, NULL, 0, NULL);
- 发送事件
1 DWORD WINAPI firstthread(void *p) 2 { 3 printf("第一个线程执行完成\n"); 4 //发送事件 5 SetEvent(event[0]); 6 return 0; 7 }
- 接受事件
1 WaitForSingleObject(event[0],INFINITE);//等待event信号出现
完整代码:
1 #include <Windows.h> 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 //事件 6 HANDLE event[3] = { 0 }; 7 //线程 8 HANDLE hthread[3] = { 0 }; 9 10 DWORD WINAPI firstthread(void *p) 11 { 12 printf("第一个线程执行完成\n"); 13 //发送事件 14 SetEvent(event[0]); 15 return 0; 16 } 17 18 19 DWORD WINAPI secondthread(void *p) 20 { 21 WaitForSingleObject(event[0],INFINITE);//等待event信号出现 22 printf("第二个线程执行完成\n"); 23 return 0; 24 } 25 26 void main() 27 { 28 event[0] = CreateEvent(NULL, TRUE, FALSE, NULL); 29 //第一个参数,指定一个结构,用于设置对象的安全特性 30 //第二个参数,如果为TRUE,表示创建一个人工重设事件,如果为FALSE,创建一个自动重设事件 31 //第三个参数,如事件应内部进入触发状态,则为TRUE 32 //第四个参数,指定事件对象的名字,NULL为匿名 33 event[1] = CreateEvent(NULL, TRUE, FALSE, NULL); 34 35 hthread[0] = CreateThread(NULL, 0, firstthread, NULL, 0, NULL); 36 hthread[1] = CreateThread(NULL, 0, secondthread, NULL, 0, NULL); 37 38 WaitForMultipleObjects(2, hthread, TRUE, INFINITE); 39 printf("全部完成\n"); 40 system("pause"); 41 }