请完成代码#include<stdio.h> #include<windows.h> DWORD Sum1,Sum2; DWORD WINAPI Summation1(LPVOID Param) { DWORD Upper=*(DWORD*)Param; for(DWORD i=0;i<=Upper;i++) Sum1+=i; return 0; } DWORD WINAPI Summation2(LPVOID Param) { DWORD Upper=*(DWORD*)Param; for(DWORD i=0;i<=Upper;i++) Sum2+=i; return 0; } int main(int argc,char *argv[]) { DWORD ThreadId1,ThreadId2; HANDLE ThreadHandle1,ThreadHandle2; HANDLE Thread[2]; int Param1,Param2; Param1 = atoi(argv[1]); if(Param1<0) { printf("An interger parameter is required.\n"); return -1; } Param2 = atoi(argv[2]); if(Param2<0) { printf("An interger parameter is required.\n"); return -1; } ThreadHandle1 = CreateThread( NULL, 0, Summation1, &Param1, 0, &ThreadId1); ThreadHandle2 = CreateThread( NULL, 0, Summation2, &Param2, 0, &ThreadId2); Thread[0]=ThreadHandle1; Thread[1]=ThreadHandle2; if((ThreadHandle1!=NULL)&&(ThreadHandle2!=NULL)) { printf("ThreadId1=%d\n", ThreadId1); printf("ThreadId2=%d\n", ThreadId2); WaitForMultipleObjects(2,Thread,TRUE,INFINITE); CloseHandle(ThreadHandle1); CloseHandle(ThreadHandle2); printf("sum1=%d\n", Sum1); printf("sum2=%d\n", Sum2); } return 0; }
时间: 2023-06-27 07:05:49 浏览: 90
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
这是一个利用多线程实现求和的代码,其中使用了Windows API中的CreateThread函数和WaitForMultipleObjects函数。
代码解析如下:
1. 定义了两个全局变量Sum1和Sum2,用于存储两个线程计算的结果。
2. 定义了两个线程函数Summation1和Summation2,分别计算从0到参数Upper之间所有整数的和。这里的Upper是通过CreateThread函数的最后一个参数传递进来的。
3. 在main函数中,通过命令行参数获取两个参数Param1和Param2。如果这两个参数不是正整数,则程序会提示用户重新输入。
4. 通过CreateThread函数创建两个线程,并将线程句柄分别存储在ThreadHandle1和ThreadHandle2中。
5. 将ThreadHandle1和ThreadHandle2存储在Thread数组中,然后调用WaitForMultipleObjects函数等待两个线程都执行结束。
6. 关闭线程句柄,并输出Sum1和Sum2的值。
完整代码如下:
阅读全文