72 lines
1.6 KiB
C++
72 lines
1.6 KiB
C++
#ifndef _THREAD_MESSAGEQUEUE_HPP_
|
|
#define _THREAD_MESSAGEQUEUE_HPP_
|
|
#ifndef _COMMON_WINDOWS_HPP_
|
|
#include <common/windows.hpp>
|
|
#endif
|
|
#ifndef _COMMON_BLOCK_HPP_
|
|
#include <common/block.hpp>
|
|
#endif
|
|
#ifndef _THREAD_EVENT_HPP_
|
|
#include <thread/event.hpp>
|
|
#endif
|
|
#ifndef _THREAD_MUTEX_HPP_
|
|
#include <thread/mutex.hpp>
|
|
#endif
|
|
#ifndef _THREAD_THREADMESSAGE_HPP_
|
|
#include <thread/thmsg.hpp>
|
|
#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<ThreadMessage> mMessageQueueHigh;
|
|
Block<ThreadMessage> mMessageQueueNormal;
|
|
Block<ThreadMessage> 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
|