WaitForMultipleObjects多线程如何使用
时间: 2024-02-24 10:55:26 浏览: 80
多线程同步演示(采用CreateThread()和WaitForMultipleObjects()函数)
5星 · 资源好评率100%
`WaitForMultipleObjects` 函数可以用于等待多个对象(如线程、事件、互斥体等)中的任意一个对象被信号激发。该函数会阻塞当前线程直到有一个对象被激发或者超时。
以下是一个使用 `WaitForMultipleObjects` 函数等待多个线程执行完毕的示例代码:
```c
#include <windows.h>
#include <stdio.h>
#define THREAD_COUNT 3
DWORD WINAPI thread_func(LPVOID lpParam) {
int id = (int)lpParam;
printf("Thread %d started\n", id);
// 模拟耗时操作
for (int i = 0; i < 1000000000; i++);
printf("Thread %d finished\n", id);
return 0;
}
int main() {
HANDLE hThreads[THREAD_COUNT];
for (int i = 0; i < THREAD_COUNT; i++) {
hThreads[i] = CreateThread(NULL, 0, thread_func, (LPVOID)i, 0, NULL);
if (hThreads[i] == NULL) {
printf("Failed to create thread %d\n", i);
return 1;
}
}
DWORD waitResult = WaitForMultipleObjects(THREAD_COUNT, hThreads, TRUE, INFINITE);
if (waitResult == WAIT_FAILED) {
printf("WaitForMultipleObjects failed\n");
return 1;
}
printf("All threads finished\n");
for (int i = 0; i < THREAD_COUNT; i++) {
CloseHandle(hThreads[i]);
}
return 0;
}
```
这段代码创建了 3 个线程,并使用 `WaitForMultipleObjects` 函数等待所有线程执行完毕。其中第一个参数是对象个数,第二个参数是对象数组,第三个参数指定是否等待所有对象都被激发,第四个参数指定超时时间。在本例中,第三个参数为 `TRUE` 表示等待所有对象都被激发。当等待函数返回时,可以判断返回值以确定哪个对象被激发。需要注意的是,等待函数返回时需要关闭对象句柄,否则可能会导致内存泄漏。
阅读全文