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("第一个线程执行完成
    ");
    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("第一个线程执行完成
");
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("第二个线程执行完成
");
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("全部完成
");
40     system("pause");
41 }
原文地址:https://www.cnblogs.com/xiaochi/p/8406129.html