MeVisLabToolboxReference
MeVis/Foundation/Sources/MLBackgroundTasks/mlBackgroundTaskMessageQueue.h
Go to the documentation of this file.
00001 // **InsertLicense** code
00002 //----------------------------------------------------------------------------------
00009 //----------------------------------------------------------------------------------
00010 
00011 
00012 #ifndef __mlBackgroundTaskMessageQueue_H
00013 #define __mlBackgroundTaskMessageQueue_H
00014 
00015 
00016 // Local includes
00017 #include "MLBackgroundTasksSystem.h"
00018 
00019 #include "mlModuleIncludes.h"
00020 
00021 #include <deque>
00022 #include <boost/thread/mutex.hpp>
00023 #include <boost/thread/condition.hpp>
00024 
00025 ML_START_NAMESPACE
00026 
00027 //-----------------------------------------------------------------------
00028 
00029 class BackgroundTaskMessage;
00030 
00031 class MLBACKGROUNDTASKS_EXPORT BackgroundTaskMessageQueue
00032 {
00033   ML_DISALLOW_COPY_AND_ASSIGN(BackgroundTaskMessageQueue)
00034 
00035 public:
00036   BackgroundTaskMessageQueue();
00037   ~BackgroundTaskMessageQueue();
00038 
00042   BackgroundTaskMessage* waitForMessage();
00043 
00046   void addMessage(BackgroundTaskMessage* message);
00047 
00051   BackgroundTaskMessage* nextMessage();
00052 
00056   BackgroundTaskMessage* nextMessage(int& availableMessages);
00057 
00061   BackgroundTaskMessage* nextMessageNoLock();
00062 
00064   bool isCanceled() const { return _isCanceled; }
00065 
00067   void cancel();
00068 
00070   void cancelAndNotify();
00071 
00072 private:
00074   std::deque<BackgroundTaskMessage*> _queue;
00076   boost::mutex         _mutex;
00078   boost::condition     _messageAvailable;
00079 
00081   bool _isCanceled;
00082 };
00083 
00084 ML_END_NAMESPACE
00085 
00086 #endif
00087 
00088