利用CreateEvent创建事件,CreateThread创建线程
// 1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <Windows.h> #include "time.h" #include <iostream> using namespace std; HANDLE HX_finish[2]; HANDLE HX_finish2; int HX_DataSize; /*HX_DataSize:数组长度;*/ int *HX_data_in, *HX_data_out; /*输入和输出数组指针*/ DWORD WINAPI ThreadOne(LPVOID param)//线程1 { for(int HX_i=0;HX_i<HX_DataSize;HX_i+=2) { int HX_k1=0; for (int HX_j=0;HX_j<HX_DataSize;HX_j++) { if (HX_data_in[HX_i]>HX_data_in[HX_j]) { HX_k1++;//记录比自己小的数的个数 } } HX_data_out[HX_k1]=HX_data_in[HX_i]; } SetEvent(HX_finish[0]); return 0; } DWORD WINAPI ThreadTwo(LPVOID param)//线程2 { for(int HX_i=1;HX_i<HX_DataSize;HX_i+=2) { int HX_k2=0; for (int HX_j=0;HX_j<HX_DataSize;HX_j++) { if (HX_data_in[HX_i]>HX_data_in[HX_j]) { HX_k2++;//记录比自己小的数的个数 } } HX_data_out[HX_k2]=HX_data_in[HX_i]; } SetEvent(HX_finish[1]); return 0; } DWORD WINAPI ThreadThree(LPVOID param)//主线程做的任务 { for(int HX_i=0;HX_i<HX_DataSize;HX_i++) { int HX_k=0; for (int HX_j=0;HX_j<HX_DataSize;HX_j++) { if (HX_data_in[HX_i]>HX_data_in[HX_j]) { HX_k++;//记录比自己小的数的个数 } } HX_data_out[HX_k]=HX_data_in[HX_i]; } cout<<"串行"<<endl; /*for(int HX_i=0;HX_i<HX_DataSize;HX_i++) { cout<<HX_data_out[HX_i]<<" "; }*/ cout<<endl; SetEvent(HX_finish2); return 0; } /* * 函数名: GetDataSize * 功能: 读入待排序序列的长度 * 输入: 待排序序列的长度 * 输出: 返回待排序序列的长度 */ int GetDataSize() { int HX_i; while(1){ printf("请输入数组的大小 :"); scanf("%d",&HX_i); if(HX_i>0) break; cout<<"Wrong Data Size."<<endl; } return HX_i; } int _tmain(int argc, _TCHAR* argv[]) { int HX_i,HX_j; clock_t HX_t1,HX_t2; HX_DataSize=GetDataSize(); /*HX_DataSize:数组长度;*/ HX_data_in=(int *)malloc(HX_DataSize*sizeof(int)); /*分配待排序序列的空间*/ if(HX_data_in==0) cout<<"Malloc memory error!"<<endl; HX_data_out=(int *)malloc(HX_DataSize*sizeof(int)); /*分配排序后数组的空间*/ if(HX_data_out==0) cout<<"Malloc memory error!"<<endl; //获得随机数 int HX_seed; printf("请输入随机数的种子:"); scanf("%d",&HX_seed); /*获得随机数的种子*/ srand(HX_seed); /*srand初始化随机种子*/ printf("获得随机数\n"); for(HX_i=0;HX_i<HX_DataSize;HX_i++) { HX_data_in[HX_i]=((int)rand())%100000; //*生成随机数,并输出 //cout<<HX_data_in[HX_i]<<" "; } cout<<endl; //并行---------------- HX_t1=clock(); long long sumpara=0; HX_finish[0]=CreateEvent(NULL,false,false,NULL);//创建事件 HX_finish[1]=CreateEvent(NULL,false,false,NULL); HANDLE thread1=CreateThread(NULL,0,ThreadOne,NULL,0,NULL);//创建线程 HANDLE thread2=CreateThread(NULL,0,ThreadTwo,NULL,0,NULL); WaitForMultipleObjects(2,HX_finish,true,INFINITE);//等待两个线程都完成 cout<<"并行"<<endl; /*for(HX_i=0;HX_i<HX_DataSize;HX_i++) { cout<<HX_data_out[HX_i]<<" "; }*/ cout<<endl; HX_t2=clock(); printf("并行时间=%d\n",HX_t2-HX_t1); //串行---------------- HX_t1=clock(); HX_finish2=CreateEvent(NULL,false,false,NULL); HANDLE thread3=CreateThread(NULL,0,ThreadThree,NULL,0,NULL); WaitForSingleObject(HX_finish2,INFINITE); HX_t2=clock(); printf("串行时间=%d\n",HX_t2-HX_t1); system("pause"); return 0; }
测试加速比: