This macro demonstrate usage of ROOT7 graphics from many threads Three different canvases in three different threads are started and regularly updated.
Extra thread created in background and used to run http protocol, in/out websocket communications and process http requests Main application thread (CLING interactive session) remains fully functional
#include <thread>
#include <iostream>
void draw_canvas(
const std::string &title,
RColor col)
{
auto pHist = std::make_shared<RH1D>(xaxis);
auto pHist2 = std::make_shared<RH1D>(xaxis);
for (
int n = 0;
n < 10000; ++
n) {
pHist->Fill(px - 2);
pHist2->Fill(py + 2);
}
auto canvas = RCanvas::Create(title);
canvas->Draw<RFrameTitle>(title);
canvas->Draw(pHist)->line.color = col;
canvas->Draw(pHist2)->line.color = RColor::kBlue;
int maxloop = 100;
canvas->Show();
std::cout << title << " started" <<std::endl;
for (int loop = 0; loop < maxloop; ++loop) {
for (
int n = 0;
n < 10000; ++
n) {
pHist->Fill(px - 2);
pHist2->Fill(py + 2);
}
canvas->Modified();
canvas->Update();
canvas->Run(0.2);
}
std::cout << title << " completed" <<std::endl;
canvas->Remove();
}
void rcanvas_mt(bool block_main_thread = true)
{
if (block_main_thread) {
}
std::thread thrd1(draw_canvas, "First canvas", RColor::kRed);
std::thread thrd2(draw_canvas, "Second canvas", RColor::kBlue);
std::thread thrd3(draw_canvas, "Third canvas", RColor::kGreen);
if (block_main_thread) {
thrd1.join();
thrd2.join();
thrd3.join();
} else {
thrd1.detach();
thrd2.detach();
thrd3.detach();
}
}
#define R__LOAD_LIBRARY(LIBRARY)
Objects used to configure the different axis types.
static std::shared_ptr< RWebWindowsManager > & Instance()
Returns default window manager Used to display all standard ROOT elements like TCanvas or TFitPanel.
virtual void SetValue(const char *name, const char *value, EEnvLevel level=kEnvChange, const char *type=nullptr)
Set the value of a resource or create a new resource.
Random number generator class based on M.
virtual void Rannor(Float_t &a, Float_t &b)
Return 2 numbers distributed following a gaussian with mean=0 and sigma=1.
void EnableThreadSafety()
Enable support for multi-threading within the ROOT code in particular, enables the global mutex to ma...
- Date
- 2018-08-16
- Warning
- This is part of the ROOT 7 prototype! It will change without notice. It might trigger earthquakes. Feedback is welcome!
- Author
- Sergey Linev s.lin.nosp@m.ev@g.nosp@m.si.de
Definition in file rcanvas_mt.cxx.