diff options
author | Willem Jan Palenstijn <WillemJan.Palenstijn@uantwerpen.be> | 2013-07-01 22:34:11 +0000 |
---|---|---|
committer | wpalenst <WillemJan.Palenstijn@uantwerpen.be> | 2013-07-01 22:34:11 +0000 |
commit | b2fc6c70434674d74551c3a6c01ffb3233499312 (patch) | |
tree | b17f080ebc504ab85ebb7c3d89f917fd87ce9e00 /include/astra/AsyncAlgorithm.h | |
download | astra-b2fc6c70434674d74551c3a6c01ffb3233499312.tar.gz astra-b2fc6c70434674d74551c3a6c01ffb3233499312.tar.bz2 astra-b2fc6c70434674d74551c3a6c01ffb3233499312.tar.xz astra-b2fc6c70434674d74551c3a6c01ffb3233499312.zip |
Update version to 1.3
Diffstat (limited to 'include/astra/AsyncAlgorithm.h')
-rw-r--r-- | include/astra/AsyncAlgorithm.h | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/include/astra/AsyncAlgorithm.h b/include/astra/AsyncAlgorithm.h new file mode 100644 index 0000000..64f70c3 --- /dev/null +++ b/include/astra/AsyncAlgorithm.h @@ -0,0 +1,128 @@ +/* +----------------------------------------------------------------------- +Copyright 2012 iMinds-Vision Lab, University of Antwerp + +Contact: astra@ua.ac.be +Website: http://astra.ua.ac.be + + +This file is part of the +All Scale Tomographic Reconstruction Antwerp Toolbox ("ASTRA Toolbox"). + +The ASTRA Toolbox is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +The ASTRA Toolbox is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. + +----------------------------------------------------------------------- +$Id$ +*/ + +#ifndef _INC_ASTRA_ASYNCALGORITHM +#define _INC_ASTRA_ASYNCALGORITHM + +#include "Config.h" +#include "Algorithm.h" + +#ifdef __linux__ +#define USE_PTHREADS +#include <pthread.h> +#else +#include <boost/thread.hpp> +#endif + + +namespace astra { + +/** + * \brief + * This class contains an wrapper algorithm that allows termination of its wrapped algorithm. + * + * This is used to allow algorithm termination from matlab command line. + */ + +class _AstraExport CAsyncAlgorithm : public CAlgorithm { +public: + /** Default constructor, containing no code. + */ + CAsyncAlgorithm(); + + /** Constructor. + */ + explicit CAsyncAlgorithm(CAlgorithm* _pAlg); + + /** Destructor. + */ + virtual ~CAsyncAlgorithm(); + + /** Initialize using config object. + */ + virtual bool initialize(const Config& _cfg); + + /** Initialize using algorithm pointer. + */ + virtual bool initialize(CAlgorithm* _pAlg); + + /** Run the algorithm. + */ + virtual void run(int _iNrIterations = 0); + + /** Wait for thread to complete and delete thread. + */ + virtual void timedJoin(int _milliseconds); + + /** Return pointer to the wrapped algorithm. + */ + CAlgorithm* getWrappedAlgorithm() { return m_pAlg; } + + /** Is the wrapped algorithm done. + */ + bool isDone() const { return m_bDone; } + + /** Signal abort to the wrapped algorithm. + */ + void signalAbort(); + +protected: + //< Has this class been initialized? + bool m_bInitialized; + + //< Should wrapped algorithm be deleted after completion? + bool m_bAutoFree; + + //< Pointer to wrapped algorithm. + CAlgorithm* m_pAlg; + + //< Is the wrapped algorithm done. + volatile bool m_bDone; + +#ifndef USE_PTHREADS + //< Handle to boost thread object running the wrapped algorithm. + boost::thread* m_pThread; +#else + pthread_t m_thread; + struct AsyncThreadInfo { + int m_iIterations; + CAlgorithm* m_pAlg; + volatile bool* m_pDone; + } m_ThreadInfo; + friend void* runAsync_pthreads(void*); +#endif + bool m_bThreadStarted; + + //< Run the wrapped algorithm. + void runWrapped(int _iNrIterations); + +}; + +} + +#endif |