source: experimental/Threading/Threading/ThreadedWorker.h @ 426

Last change on this file since 426 was 426, checked in by Torben Dannhauer, 11 years ago
File size: 1.9 KB
Line 
1#pragma once
2
3#include <osg/Referenced>
4#include <osg/ref_ptr>
5#include <OpenThreads/Thread>
6#include <OpenThreads/Mutex>
7
8#include "ThreadWorkerBase.h"
9
10
11/**
12 * \brief This class is a Thread Object which allows to create Functors and attach them to this thread object.
13 *
14 * Subclass ThreadWorkerBase to implement your own functor to execute your custom code threaded.
15 *
16 * Use setDone(true) to shut down the thread nonblocking, or call cancel() to shut down the thread blocking (both called from outside of the workerthread).
17 * Inside the workerthread's functor, you can set the functor parameter done=true to shutdown the thread after the current execution.
18 *
19 * Use osg::ref_ptr pointer to manage the thread object.
20 * This causes the threadobjects to get deleted finally and hence the threads aret canceled formally -> The app won't finish until all threads have finished their work.
21 *
22 * @author Torben Dannhauer
23 * @date  Okt 2012
24 */ 
25class ThreadedWorker : public osg::Referenced, public OpenThreads::Thread
26{
27public:
28        ThreadedWorker() ;
29        ~ThreadedWorker();      //Destroying the thread object will implicit call cancel(), then the function will block until the thread has finished.
30        virtual void run();
31        virtual int cancel();
32       
33        void setDone(bool done);        // signals the thread to stop but returns immediately. Use cancel if you want to wait blocking until the thread is canceled.
34        bool getDone() const { return _done; } 
35
36        void setThreadWorker( ThreadWorkerBase* tworker);       // This function sets the functor which should be executed threaded. Set NULL to remove the current functor and cancel the thread.
37        ThreadWorkerBase* getCurrentThreadWorker()              {return(_threadWorker);};
38
39private:
40        bool _done;
41        osg::ref_ptr<ThreadWorkerBase> _threadWorker;
42        OpenThreads::Mutex _threadWorkerMutex;  // Ensures the functor is not replacable while it is executed
43};
Note: See TracBrowser for help on using the repository browser.