// $Id$ //----------------------------------------------------------------------- // The GSI Online Offline Object Oriented (Go4) Project // Experiment Data Processing at EE department, GSI //----------------------------------------------------------------------- // Copyright (C) 2000- GSI Helmholtzzentrum fuer Schwerionenforschung GmbH // Planckstr. 1, 64291 Darmstadt, Germany // Contact: http://go4.gsi.de //----------------------------------------------------------------------- // This software can be used under the license agreements as stated // in Go4License.txt file which is part of the distribution. //----------------------------------------------------------------------- #ifndef TGo4TestRunnable_h #define TGo4TestRunnable_h #include "TGo4Runnable.h" class TH1D; /** * Example of a user defined runnable subclass. Method Run() _must_ be implemented. * Methods ThreadCatch and UnexpectedCatch _can_ be overridden to change default * exception behaviour. * This runnable is able to do different actions depending on the fiMode parameter set * in the ctor (good for easy testing). However, the usual way is to create a dedicated * runnable class for a dedicated purpose and pass different * runnable classes to the different go4 threads (see Go4TaskHandler package for examples). *********************************************************************************** * Different actions in this runnable: * fiMode == 0: Dummy * printout a message every 5 seconds. * fiMode == 1: Kill and create * sleep 30s, then kill other threads- sleep 5s, then create other threads again * fiMode == 2: Stop and start * sleep 10s, then stop other threads- sleep 10s, then start other threads again * fiMode == 3: Aborting all * sleep 30s, then abort application by means of exception * fiMode == 4: Histogramming * creates histogram, fills it with random gaussian and draws it on pad * depending on the runnable name ("Maker1", "Maker2"), different pads are used * Maker 1 deletes histogram again each time, Maker 2 keeps initial histogram * sleeps of 2s are used to slow down the action * fiMode == 5: Recreator * Cancel and recreate one thread by name ("First Thread") every 15 s. * fiMode == 6: Exception tester * sleep 60s, then throw different thread exceptions (latest: Restart exception) * fiMode == 7: Histogram without drawing * create histogram, fill it with random and delete it again * for memory alloc tests independent from root gui * fiMode default: Undefined * throw logic exception ********************************************************************************* * NOTE1: Members of the runnable (histogram, canvas) are not deleted when the * TThread is killed. The runnable exists independent from the thread. * NOTE2: The user just has to create own runnables and a threadmanager subclasses, * subclassing of TGo4Thread or other parts of the package are not required! * @author J. Adamczewski(at)gsi.de * @author Go4 project-DVEE-GSI Darmstadt * @author Germany * @version 0.9 * @since jul 2000-oct 2001 */ class TGo4TestRunnable : public TGo4Runnable { public: //## Constructors (generated) TGo4TestRunnable(); TGo4TestRunnable(const TGo4TestRunnable &right); TGo4TestRunnable(const char *name, TGo4ThreadManager *man, Int_t mode = 0); virtual ~TGo4TestRunnable(); protected: /** * The working function which runs in the * thread */ Int_t Run (void *ptr) override; /** * catch for exceptions occurring in workfunc */ void ThreadCatch(TGo4Exception &ex) override; /** * catch for all unexpected exceptions happening in * workfunc */ void UnexpectedCatch() override; private: /** * mode number which can be used to create runnables * with different actions in Workfunc; useful for testing * without creating new subclasses of runnable... */ Int_t fiMode{0}; //! // Additional Private Declarations TH1D* fxHisto{nullptr}; //! ClassDefOverride(TGo4TestRunnable,1) }; #endif