#ifndef _THREAD_MESSAGEQUEUE_HPP_ #define _THREAD_MESSAGEQUEUE_HPP_ #ifndef _COMMON_WINDOWS_HPP_ #include #endif #ifndef _COMMON_BLOCK_HPP_ #include #endif #ifndef _THREAD_EVENT_HPP_ #include #endif #ifndef _THREAD_MUTEX_HPP_ #include #endif #ifndef _THREAD_THREADMESSAGE_HPP_ #include #endif class MessageQueue { public: enum QueueStatus{QueueLocked,QueueOpen}; MessageQueue(void); virtual ~MessageQueue(); WORD postMessage(ThreadMessage &someThreadMessage); WORD peekMessage(ThreadMessage &someThreadMessage); WORD waitMessage(ThreadMessage &someThreadMessage); WORD itemsInQueue(void); void shutdownQueue(void); void restartQueue(void); void isAlertable(WORD isAlertable); private: WORD putQueueMessage(ThreadMessage &someThreadMessage); WORD peekQueueMessage(ThreadMessage &someThreadMessage); WORD getQueueMessage(ThreadMessage &someThreadMessage); WORD isQueueEmpty(void)const; WORD isQueueLocked(void)const; WORD mIsAlertable; Event mNamedEvent; Mutex mMutexSemaphore; QueueStatus mQueueStatus; Block mMessageQueueHigh; Block mMessageQueueNormal; Block mMessageQueueLow; }; inline MessageQueue::MessageQueue(void) : mNamedEvent("MESSAGEQUEUENAMEDEVENT"), mMutexSemaphore("MESSAGEQUEUENAMEDMUTEX"), mQueueStatus(QueueOpen), mIsAlertable(FALSE) { } inline MessageQueue::~MessageQueue() { } inline WORD MessageQueue::isQueueLocked(void)const { return QueueLocked==mQueueStatus; } inline void MessageQueue::isAlertable(WORD isAlertable) { mIsAlertable=isAlertable; } #endif