VC++如何知道子线程是否结束
时间: 2024-10-19 19:14:55 浏览: 17
VC++线程开关
4星 · 用户满意度95%
在VC++中,当创建一个子线程并希望监控其结束时,可以使用`CreateThread`函数配合`WaitForSingleObject`函数或者`WaitForMultipleObjects`函数。下面是一个基本的例子:
1. 使用`CreateThread`创建子线程,并获取返回的线程标识符(Thread ID):
```cpp
HANDLE hThread = CreateThread(NULL, 0, YourFunction, // 子线程函数指针
arg1, // 函数参数
0, // 标志
&tid); // 存储线程ID的变量
```
2. 然后,你可以使用`WaitForSingleObject`等待特定线程结束:
```cpp
DWORD result = WaitForSingleObject(hThread, INFINITE); // 持久等待直到线程结束
if (result == WAIT_OBJECT_0) {
CloseHandle(hThread); // 关闭线程句柄
}
```
或者使用`WaitForMultipleObjects`等待一组线程或某个特定线程组结束:
```cpp
const DWORD MAX_THREADS = 10;
HANDLE threads[MAX_THREADS];
// ... 初始化线程列表
result = WaitForMultipleObjects(MAX_THREADS, threads, FALSE, INFINITE);
if (result >= 0) {
for (int i = 0; i < result; ++i) {
if (threads[i] != INVALID_HANDLE_VALUE) {
CloseHandle(threads[i]);
}
}
} else if (result == WAIT_FAILED) {
// 错误处理
}
```
在上述代码中,如果线程已经结束,`WaitForSingleObject`或`WaitForMultipleObjects`会返回相应的线程标识符,表示线程已终止。
阅读全文