多线程编程
XThreadDll.h
#pragma once
class CXThreadDll
{
public:
CXThreadDll();
~CXThreadDll();
bool Start();
void Wait();
virtual void Main() = 0;
private:
unsigned int th = 0;
};
XThreadDll.cpp
#include "XThreadDll.h"
#include <process.h>
#include <windows.h>
static void ThreadMain(void *para)
{
CXThreadDll *th = (CXThreadDll*)para;
th->Main();
_endthread();
}
CXThreadDll::CXThreadDll()
{
}
CXThreadDll::~CXThreadDll()
{
}
bool CXThreadDll::Start()
{
th = _beginthread(ThreadMain, 0, this);
if (((int)th) <= 0)
{
return false;
}
return true;
}
void CXThreadDll::Wait()
{
WaitForSingleObject((HANDLE)th, INFINITE);
}
main
// XThread.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "XThreadDll.h"
#include <windows.h>
#include <iostream>
using namespace std;
static char *arr = NULL;
class MyThread :public CXThreadDll
{
public:
int b = 0;
int e = 0;
void Main()
{
for (int i= b;i<=e;i++)
{
arr[i] = i;
}
}
private:
};
int main()
{
int size = 1024 * 1024 * 1024;
arr = new char[size];
#if 1
int tsize = 4;
MyThread* ths = new MyThread[tsize];
long long start = GetTickCount();
for (int i = 0; i < tsize; i++)
{
ths[i].b = i*(size / tsize);
ths[i].e = ths[i].b + (size / tsize);
if (ths[i].e >= size)
{
ths[i].e = size - 1;
}
ths[i].Start();
}
for (int i = 0; i < tsize; i++)
{
ths[i].Wait();
}
#endif
//for (int i = 0;i<size;i++)
//{
// arr[i] = i;
//}
long long end = GetTickCount();
cout << "main deal ms" << end - start << endl;
getchar();
return 0;
}