1.使用事件去控制线程1和线程2
#include <Windows.h> #include <stdio.h> #include <stdlib.h> HANDLE event[3] = { 0 }; //代表事件 HANDLE hthread[3] = { 0 }; //代表线程 DWORD WINAPI firstthread(void *p) { MessageBoxA(0, "1", "1", 0); printf("第一个线程执行完成"); SetEvent(event[0]); return 0; } WORD WINAPI secondthread(void *p) { WaitForSingleObject(event[0], INFINITE); //等待event信号出现 MessageBoxA(0, "2", "2", 0); printf("第二个线程执行完成"); return 0; } void main() { //event[0] = CreateEvent(NULL, TRUE, FALSE, NULL); //创建事件的四个属性: //SECURITY_ATTRIBUTES,指定一个结构,用于设置对象的安全特性。如变成ByVal As Long,并传递零值,则表明使用对象默认的安全设置 //Long,如果为TRUE,表示创建一个人工重设事件;如果为FALSE,表示创建一个自动重设事件 //Long,如事件应内部进入触发状态,则为TRUE //String,指定事件对象的名字。用vbNullString创建一个未命名事件对象。如已经存在拥有这个名字的一个事件,则现有的命名事件就会打开。这个名字可能不与一个现有互斥体、信号机、可等待计时器或文件映射的名字相符 event[0] = CreateEvent(NULL, TRUE, FALSE, NULL); event[1] = CreateEvent(NULL, TRUE, FALSE, NULL); hthread[0]=CreateThread(NULL, 0, firstthread, NULL, 0, NULL); hthread[1]=CreateThread(NULL, 0, secondthread, NULL, 0, NULL); WaitForMultipleObjects(2, hthread, TRUE, INFINITE); printf("全部完成"); system("pause"); }
Wait...中将INFINITE改成5000就表示等待5秒,而不是无限,它的单位是毫秒。
时间: 2024-12-28 16:08:13