(1)在主函数中先使用系统调用CreateThread()创建一个子线程1,要求在子线程1中求1-50的和并输出,再用CreateThread()创建一个子线程2,要求在子线程2中求1-50的积并输出
时间: 2024-09-30 10:01:55 浏览: 34
在C++中,你可以通过Windows API来使用`CreateThread()`函数创建子线程。下面是一个简单的示例,展示了如何分别在一个子线程1中计算1到50的和,并在另一个子线程2中计算它们的积:
```cpp
#include <windows.h>
#include <iostream>
// 计算1到n的和的线程函数
DWORD WINAPI SumThreadProc(LPVOID lpParam) {
int n = *(int*)lpParam;
int sum = 0;
for (int i = 1; i <= n; ++i) {
sum += i;
}
std::cout << "Sum of 1 to " << n << " is: " << sum << std::endl;
return 0; // 指向ExitCode的指针,这里默认为0表示正常结束
}
// 计算1到n的积的线程函数
DWORD WINAPI ProductThreadProc(LPVOID lpParam) {
int n = *(int*)lpParam;
int product = 1;
for (int i = 1; i <= n; ++i) {
product *= i;
}
std::cout << "Product of 1 to " << n << " is: " << product << std::endl;
return 0; // ...同上
}
int main() {
// 创建子线程1
DWORD threadId1;
int n = 50;
LPVOID param1 = &n;
if (CreateThread(NULL, 0, SumThreadProc, param1, 0, &threadId1)) {
printf("Thread 1 created with ID: %u\n", threadId1);
} else {
std::cerr << "Failed to create thread 1." << std::endl;
return -1;
}
// 等待子线程1完成
WaitForSingleObject(threadId1, INFINITE);
// 创建子线程2
DWORD threadId2;
LPVOID param2 = &n;
if (CreateThread(NULL, 0, ProductThreadProc, param2, 0, &threadId2)) {
printf("Thread 2 created with ID: %u\n", threadId2);
} else {
std::cerr << "Failed to create thread 2." << std::endl;
return -1;
}
// 等待子线程2完成
WaitForSingleObject(threadId2, INFINITE);
// 程序退出
return 0;
}
```
在这个例子中,每个子线程都有自己的独立栈空间,在主线程中创建并管理它们。`WaitForSingleObject()`函数用于等待子线程结束。
阅读全文