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

Last change on this file since 425 was 425, checked in by Torben Dannhauer, 12 years ago
File size: 1.6 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 *
20 * @author Torben Dannhauer
21 * @date  Okt 2012
22 */ 
23class ThreadedWorker : public osg::Referenced, public OpenThreads::Thread
24{
25public:
26        ThreadedWorker() ;
27        ~ThreadedWorker();      //Destroying the thread object will implicit call cancel(), then the function will block until the thread has finished.
28        virtual void run();
29        virtual int cancel();
30       
31        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.
32        bool getDone() const { return _done; } 
33
34        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.
35        ThreadWorkerBase* getCurrentThreadWorker()              {return(_threadWorker);};
36
37private:
38        bool _done;
39        osg::ref_ptr<ThreadWorkerBase> _threadWorker;
40        OpenThreads::Mutex _threadWorkerMutex;  // Ensures the functor is not replacable while it is executed
41};
Note: See TracBrowser for help on using the repository browser.