Files
Work/thread/MSGQUEUE.HPP
2024-08-07 09:16:27 -04:00

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