MessageQueueStatusThread.h
Go to the documentation of this file.00001
00002 #ifndef INCLUDED_MessageQueueStatusThread_h_
00003 #define INCLUDED_MessageQueueStatusThread_h_
00004
00005 #ifdef PLATFORM_APERIOS
00006 # warning MessageQueueStatusThread is not Aperios compatable, this is not going to compile
00007 #else
00008
00009 #include "IPC/SemaphoreManager.h"
00010 #include "IPC/Thread.h"
00011 #include <list>
00012
00013 class MessageQueueBase;
00014
00015
00016 class MessageQueueStatusThread : protected Thread {
00017 public:
00018
00019 class StatusListener {
00020 public:
00021
00022 virtual ~StatusListener() {}
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 virtual void messagesRead(MessageQueueBase& which, unsigned int howmany)=0;
00033 };
00034
00035
00036
00037 MessageQueueStatusThread()
00038 : Thread(), statusListeners(), queue(NULL), semid(), numRead()
00039 {}
00040
00041 explicit MessageQueueStatusThread(MessageQueueBase& mq, StatusListener* listener=NULL)
00042 : Thread(), statusListeners(), queue(NULL), semid(), numRead()
00043 {
00044 setMessageQueue(mq);
00045 addStatusListener(listener);
00046 }
00047
00048 ~MessageQueueStatusThread();
00049
00050
00051 virtual void addStatusListener(StatusListener* l);
00052
00053 virtual void removeStatusListener(StatusListener* l);
00054
00055
00056 virtual void setMessageQueue(MessageQueueBase& mq);
00057
00058 virtual MessageQueueBase* getMessageQueue();
00059
00060 protected:
00061
00062 virtual bool launched();
00063
00064 virtual void* run();
00065
00066 virtual Thread& stop();
00067
00068 virtual void cancelled();
00069
00070
00071 virtual void fireMessagesRead(unsigned int howmany);
00072
00073
00074 std::list<StatusListener*> statusListeners;
00075
00076
00077 MessageQueueBase* queue;
00078
00079
00080 SemaphoreManager::semid_t semid;
00081
00082
00083 unsigned int numRead;
00084
00085 private:
00086 MessageQueueStatusThread(const MessageQueueStatusThread&);
00087 MessageQueueStatusThread& operator=(const MessageQueueStatusThread&);
00088 };
00089
00090
00091
00092
00093
00094
00095 #endif
00096 #endif