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
RevLine 
[420]1#pragma once
2
3#include <osg/Referenced>
[425]4#include <osg/ref_ptr>
[420]5#include <OpenThreads/Thread>
[425]6#include <OpenThreads/Mutex>
[420]7
[425]8#include "ThreadWorkerBase.h"
9
10
[422]11/**
12 * \brief This class is a Thread Object which allows to create Functors and attach them to this thread object.
13 *
[425]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 *
[422]20 * @author Torben Dannhauer
21 * @date  Okt 2012
22 */ 
[423]23class ThreadedWorker : public osg::Referenced, public OpenThreads::Thread
[420]24{
25public:
[423]26        ThreadedWorker() ;
27        ~ThreadedWorker();      //Destroying the thread object will implicit call cancel(), then the function will block until the thread has finished.
[420]28        virtual void run();
29        virtual int cancel();
30       
[425]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.
[421]32        bool getDone() const { return _done; } 
[420]33
[425]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
[420]37private:
38        bool _done;
[425]39        osg::ref_ptr<ThreadWorkerBase> _threadWorker;
40        OpenThreads::Mutex _threadWorkerMutex;  // Ensures the functor is not replacable while it is executed
[420]41};
Note: See TracBrowser for help on using the repository browser.