#include #include #include #include #include #include #include class MyMainFrame : public TGMainFrame { RQ_OBJECT("MyMainFrame") private: TTimer *timer; TThread *thread; TGMainFrame *fMain; public: MyMainFrame(const TGWindow *p,UInt_t w,UInt_t h); virtual ~MyMainFrame(); void DoDraw(); void EnableTimer(); void DisableTimer(); void *PrintStuff(void *arg); }; MyMainFrame::MyMainFrame(const TGWindow *p,UInt_t w,UInt_t h) { fMain = new TGMainFrame(p,w,h); TGTextButton *start = new TGTextButton(fMain,"&Start "); start->Connect("Clicked()","MyMainFrame",this,"EnableTimer()"); TGTextButton *stop = new TGTextButton(fMain,"&Stop "); stop->Connect("Clicked()","MyMainFrame",this,"DisableTimer()"); fMain->AddFrame(start, new TGLayoutHints(kLHintsCenterY,5,5,3,4)); fMain->AddFrame(stop, new TGLayoutHints(kLHintsCenterY,5,5,3,4)); thread = new TThread("thread", (void (*)(void *))&PrintStuff, (void*) 0); } void MyMainFrame::DoDraw() { thread->Run(); } void MyMainFrame::EnableTimer() { if(!timer) { timer = new TTimer(this, 1000, kTRUE); //synchronous or asynch? timer->Connect("Timeout()", "MyMainFrame", this, "DoDraw()"); timer->Reset(); timer->TurnOn(); } else timer->TurnOn(); } void MyMainFrame::DisableTimer() { if(timer) timer->TurnOff(); } void *MyMainFrame::PrintStuff(void *arg) { cout << "Did it work?" << endl; } MyMainFrame::~MyMainFrame() { fMain->Cleanup(); delete fMain; } void sample() { // Popup the GUI... new MyMainFrame(gClient->GetRoot(),600,400); }