OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
Thread.h
Go to the documentation of this file.
1 #ifndef ossimThread_HEADER
2 #define ossimThread_HEADER 1
4 #include <ossim/base/Barrier.h>
5 #include <thread>
6 #include <mutex>
7 #include <condition_variable>
8 #include <atomic>
9 #include <string>
10 
11 namespace ossim{
12 
67  {
68  public:
73  class Interrupt : public std::exception{
74  public:
75  Interrupt(const std::string& what=""):m_what(what){}
76  virtual const char* what() const throw(){return m_what.c_str();}
77  protected:
78  std::string m_what;
79  };
83  Thread();
84 
90  virtual ~Thread();
91 
95  void start();
96 
100  bool isRunning()const{return m_running.load(std::memory_order_relaxed);}
101 
108  bool isInterruptable()const{return m_interrupt.load(std::memory_order_relaxed);}
109 
117  virtual void cancel(){setCancel(true);}
118 
123  virtual void setCancel(bool flag);
124 
130  virtual void waitForCompletion();
131 
136  void pause();
137 
141  void resume();
142 
146  bool isPaused()const;
147 
153  static void sleepInSeconds(ossim_uint64 seconds);
154 
160  static void sleepInMilliSeconds(ossim_uint64 millis);
161 
167  static void sleepInMicroSeconds(ossim_uint64 micros);
168 
174  static std::thread::id getCurrentThreadId();
175 
179  static ossim_uint64 getNumberOfProcessors();
183  static void yieldCurrentThread();
184 
185  protected:
190  virtual void run()=0;
191 
196  virtual void interrupt();
197 
206  virtual void runInternal();
207 
208  private:
209  std::shared_ptr<std::thread> m_thread;
210  std::atomic<bool> m_running;
211  std::atomic<bool> m_interrupt;
212  std::shared_ptr<ossim::Barrier> m_pauseBarrier;
213  std::condition_variable m_runningCondition;
214  mutable std::mutex m_runningMutex;
215 
219  void setInterruptable(bool flag);
220  };
221 }
222 
223 #endif
std::shared_ptr< ossim::Barrier > m_pauseBarrier
Definition: Thread.h:212
Interrupt(const std::string &what="")
Definition: Thread.h:75
std::shared_ptr< std::thread > m_thread
Definition: Thread.h:209
This code was derived from https://gist.github.com/mshockwave.
Definition: Barrier.h:8
std::atomic< bool > m_interrupt
Definition: Thread.h:211
This is an Interrupt exception that is thrown if the.
Definition: Thread.h:73
bool isRunning() const
Definition: Thread.h:100
Thread is an abstract class.
Definition: Thread.h:66
std::atomic< bool > m_running
Definition: Thread.h:210
std::string m_what
Definition: Thread.h:78
unsigned long long ossim_uint64
#define OSSIM_DLL
std::mutex m_runningMutex
Definition: Thread.h:214
std::condition_variable m_runningCondition
Definition: Thread.h:213
virtual void cancel()
This basically requests that the thread be canceled.
Definition: Thread.h:117
virtual const char * what() const
Definition: Thread.h:76
bool isInterruptable() const
This is typically set if.
Definition: Thread.h:108