#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <chrono>
#include <thread>
using namespace std;
int N = 10;
void CopyImageData(unsigned char *dst, unsigned char *src, int size)
{
for (int i = 0; i < N; ++i)
{
memcpy(dst, src, size);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int size = 2048 * 2048 * 2;
unsigned char *data = new unsigned char[size];
for (int i = 0; i < size; ++i)
{
data[i] = i % 256;
}
unsigned char *dataCopy = new unsigned char[size];
int threadNumber = 2;
printf("Please enter thread number : ");
while (scanf_s("%d", &threadNumber) != EOF)
{
auto start = chrono::steady_clock::now();
for (int i = 0; i < N * threadNumber; ++i)
{
memcpy(dataCopy, data, size);
}
auto end = chrono::steady_clock::now();
chrono::duration<double, micro> elapsed = end - start;
cout << "time: " << elapsed.count() << "us" << endl;
thread *list = new thread[threadNumber];
for (int i = 0; i < threadNumber; ++i)
{
list[i] = thread(CopyImageData, dataCopy, data, size);
}
start = chrono::steady_clock::now();
for (int i = 0; i < threadNumber; ++i)
{
list[i].join();
}
end = chrono::steady_clock::now();
elapsed = end - start;
cout << "time: " << elapsed.count() << "us" << endl;
printf("Please enter thread number : ");
}
return 0;
}