c++多线程处理数组

本例子是《VC++Windows多线程实战图片编辑器视频课程》的学习笔记。
定义一个大小为1000 * 1000 * 1000的数组,分别用单线程的方法和多线程的方法给数组赋值,并计算两种方法的耗时。
_beginthread函数用于创建线程;
_endthread函数用于结束线程;
WaitForSingleObject函数等待线程结束。
使用c++类对线程进行封装。

XThread.h

    #pragma once
    class XThread
    {
    public:
    	bool Start();//创建线程并判断线程是否创建成功
    	void Wait();//等待线程结束函数
    	virtual void Main() = 0;//纯虚函数
    	XThread();
    	virtual ~XThread();
    private:
    	unsigned int th = 0;//线程句柄
    };

XThread.cpp

    #include "XThread.h"
    #include 
    #include 
    static void ThreadMain(void *para)
    {
    	XThread *th = (XThread *)para;
    	th->Main();
    	_endthread();
    }
    bool XThread::Start()
    {
    	th = _beginthread(ThreadMain, 0, this);//保存线程句柄
    	if(((int)th) <= 0) {
    		return false;
    	}
    	return true;
    }
    void XThread::Wait()
    {
    	WaitForSingleObject((HANDLE)th, INFINITE);
    }
    XThread::XThread()
    {
    }
    XThread::~XThread()
    {
    }
# main.cpp

    #include 
    #include 
    #include "XThread.h"
    using namespace std;
    static char *arr = NULL;
    class MyThread :public XThread
    {
    public:
    	int begin = 0;
    	int end = 0;
    	void Main()//每个线程对begin——end区间的数组赋值
    	{
    		for (int i = begin; i <= end; i++)
    		{
    			arr[i] = i;
    		}
    	}
    };
    int main()
    {
    	int size = 1000 * 1000 * 1000;
    	arr = new char[size];
    	int tsize = 4;//设定线程数
    	MyThread *ths = new MyThread[tsize];
    	/*计算单个线程的耗时*/
    	long long start = GetTickCount();
    	for (int i = 0; i < size; i++)
    	{
    		arr[i] = i;
    	}
    	long long end = GetTickCount();
    	cout << "单线程耗时 ms = " << end - start <<"ms"<< endl;
    	/*计算四个线程的耗时*/
    	long long start_thread = GetTickCount();
    	for (int i = 0; i < tsize; i++)
    	{
    		ths[i].begin = i*(size / tsize);//起始计数值
    		ths[i].end = ths[i].begin + (size / tsize);//结束计数值
    		if (ths[i].end >= size) {
    			ths[i].end = size - 1;
    		}
    		ths[i].Start();
    	}
    	for (int i = 0; i < tsize; i++)//等待每个线程结束
    	{
    		ths[i].Wait();
    	}
    	long long end_thread = GetTickCount();
    	cout << "四线程耗时 ms = " << end_thread - start_thread <<"ms"<< endl;
    	getchar();
    }

运行结果

在这里插入图片描述

你可能感兴趣的:(c++,多线程)