#include #include #include #include #include "TCanvas.h" #include "TPad.h" #include "TFrame.h" #include "TGraph.h" #include "TH1.h" #include "TThread.h" void DoStuff(size_t); const size_t dim1 = 50; const size_t dim2 = 1000; const size_t total = dim1*dim2; const size_t nThreads = 32; double **x, **y, **z; int main() { //Fill some arrays with random numbers std::default_random_engine Generator; std::normal_distribution NormalDistribution(0.5,0.1); x = new double*[dim1]; y = new double*[dim1]; z = new double*[dim1]; for(size_t k=0; k < dim1; k++) { x[k] = new double[dim2]; y[k] = new double[dim2]; z[k] = new double[dim2]; } for(size_t k=0; k < dim1; k++) { for(size_t l=0; l < dim2; l++) { x[k][l] = NormalDistribution(Generator); y[k][l] = NormalDistribution(Generator); z[k][l] = NormalDistribution(Generator); } } //make some threads and plot the data in the above arrays. TThread::Initialize(); size_t RunThreads = nThreads; std::thread Threads[nThreads]; for(size_t m=0; m < dim1; m+=nThreads) { if((dim1 - m) < nThreads){RunThreads = dim1 - m;} for(size_t k=0; k < RunThreads; k++) { Threads[k] = std::thread(DoStuff,k+m); } for(size_t k=0; k < RunThreads; k++) { Threads[k].join(); } } for(size_t k=0; k < dim1; k++) { delete x[k]; delete y[k]; delete z[k]; } delete[] x; delete[] y; delete[] z; return 0; } void DoStuff(size_t n) { TThread thr(n); const unsigned int xres = 1024; const unsigned int yres = 768; const double xMaximum = 1; const double yMaximum = 1; std::stringstream Pad1Name; std::stringstream cvname; std::stringstream OutputFileName; cvname << "canvas_" << n; Pad1Name << "pad1_" << n; OutputFileName << n << ".png"; //With no lock the following will crash TThread::Lock(); TCanvas* cv = new TCanvas(cvname.str().c_str(),"A random title",0,0,xres,yres); cv->cd(); TPad* Pad1 = new TPad(Pad1Name.str().c_str(),"A random title",0,0,1,1); Pad1->Draw(); Pad1->cd(); TH1F* Frame1 = Pad1->DrawFrame(0,0,xMaximum,yMaximum); Frame1->GetXaxis()->SetLabelOffset(0.035); Frame1->GetXaxis()->SetTitleOffset(1.5); Frame1->SetXTitle("x"); Frame1->SetYTitle("y"); Frame1->Draw("AXIS"); Pad1->cd(); TGraph *xy = new TGraph(dim2,x[n],y[n]); xy->SetMarkerColor(kRed); xy->SetMarkerStyle(2); xy->Draw("P"); TGraph *xz = new TGraph(dim2,x[n],z[n]); xz->SetMarkerColor(kGreen); xz->SetMarkerStyle(2); xz->Draw("P"); cv->Print(OutputFileName.str().c_str(),"png"); delete xy; delete xz; delete Pad1; delete cv; TThread::UnLock(); }