#include<iostream>
#include<mutex>
#include<list>
#include<thread>
#include<vector>
#include "function_Ptr.h"
#include "testThread.h"
#include "testMutex.h"
int main(void)
{
RegFun(Min);
Plat();
RegFun(Max);
Plat();
#if 1
auto mainThreadId = std::this_thread::get_id();
cout << "mainThreadId = " << mainThreadId << endl;
//start a thread
std::vector<double> v;
for (int i = 0; i < 1000; i++)
{
v.push_back(rand());
}
cout << "vector size = "<< v.size() << endl;
double value = 0.0;
auto st = clock();
cout << "st = " << st << endl;
for (auto & info : v)
{
value += caculate(info);
}
auto ed = clock();
cout << "ed = " << ed << endl;
cout << "single thread: " << value << " " << ed - st << "ms" << endl;
// multithread
auto iterMid = v.begin() + (v.size() / 2); // ptr vector
//calculator vector iterMid to iterEnd
double anotherv = 0.0;
auto iterEnd = v.end();
st = clock();
cout << "st = " << st << endl;
std::thread s([&anotherv, mainThreadId, iterMid, iterEnd]() { // lambda
anotherv = visitRange(mainThreadId, iterMid, iterEnd, caculate);
});
// calculator vector begin() to iterMid
auto halfv = visitRange(mainThreadId, v.begin(), iterMid, caculate);
//close thread
s.join();
ed = clock();
cout << "ed = " << ed << endl;
cout << "multi thread: " << (halfv + anotherv) << " " << ed - st << "ms" << endl;
#endif
msgList mlist;
thread pwrite0(&msgList::WriteList, &mlist);
thread pwrite1(&msgList::WriteList, &mlist);
#if 1
pwrite0.join();
pwrite1.join();
#endif
cout << "threads end!" << endl;
mlist.showList(); //after subthread end, mainthead print list
return 0;
}