Initial
This commit is contained in:
104
thread/MTHREAD.BAK
Normal file
104
thread/MTHREAD.BAK
Normal file
@@ -0,0 +1,104 @@
|
||||
#ifndef _THREAD_MESSAGETHREAD_HPP_
|
||||
#define _THREAD_MESSAGETHREAD_HPP_
|
||||
#ifndef _COMMON_BLOCK_HPP_
|
||||
#include <common/block.hpp>
|
||||
#endif
|
||||
#ifndef _THREAD_QUEUETHREAD_HPP_
|
||||
#include <thread/qthread.hpp>
|
||||
#endif
|
||||
#ifndef _THREAD_MESSAGEQUEUE_HPP_
|
||||
#include <thread/msgqueue.hpp>
|
||||
#endif
|
||||
#ifndef _THREAD_THREADCALLBACK_HPP_
|
||||
#include <thread/tcallbck.hpp>
|
||||
#endif
|
||||
|
||||
class MessageThread : private QueueThread
|
||||
{
|
||||
public:
|
||||
MessageThread(void);
|
||||
virtual ~MessageThread();
|
||||
WORD postMessage(ThreadMessage &someThreadMessage);
|
||||
WORD sendMessage(ThreadMessage &someThreadMessage);
|
||||
WORD peekMessage(ThreadMessage &someThreadMessage);
|
||||
WORD messageCount(void);
|
||||
DWORD suspend(void);
|
||||
DWORD resume(void);
|
||||
DWORD wait(DWORD timeout)const;
|
||||
void stop(void);
|
||||
void isAlertable(WORD isAlertable);
|
||||
WORD insertHandler(PureThreadCallback *lpThreadCallback);
|
||||
void removeHandler(PureThreadCallback *lpThreadCallback);
|
||||
private:
|
||||
WORD getMessage(ThreadMessage &someThreadMessage);
|
||||
void dispatchMessage(ThreadMessage &someThreadMessage);
|
||||
void startup(void);
|
||||
void shutdown(void);
|
||||
void messageLoop(void);
|
||||
void removeHandlers(void);
|
||||
|
||||
MessageQueue mMessageQueue;
|
||||
Mutex mMessageThreadMutex;
|
||||
Block<ThreadCallbackPointer> mThreadCallback;
|
||||
};
|
||||
|
||||
inline
|
||||
WORD MessageThread::postMessage(ThreadMessage &someThreadMessage)
|
||||
{
|
||||
someThreadMessage.messageTime().refresh();
|
||||
mMessageQueue.postMessage(someThreadMessage);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
inline
|
||||
WORD MessageThread::sendMessage(ThreadMessage &someThreadMessage)
|
||||
{
|
||||
someThreadMessage.messageTime().refresh();
|
||||
someThreadMessage.priority(ThreadMessage::PriorityHigh);
|
||||
postMessage(someThreadMessage);
|
||||
::SleepEx(0,FALSE); // give up remainder of quantum so message can be processed
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
inline
|
||||
WORD MessageThread::getMessage(ThreadMessage &someThreadMessage)
|
||||
{
|
||||
return mMessageQueue.waitMessage(someThreadMessage);
|
||||
}
|
||||
|
||||
inline
|
||||
WORD MessageThread::peekMessage(ThreadMessage &someThreadMessage)
|
||||
{
|
||||
return mMessageQueue.peekMessage(someThreadMessage);
|
||||
}
|
||||
|
||||
inline
|
||||
WORD MessageThread::messageCount(void)
|
||||
{
|
||||
return mMessageQueue.itemsInQueue();
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD MessageThread::suspend(void)
|
||||
{
|
||||
return QueueThread::suspend();
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD MessageThread::resume(void)
|
||||
{
|
||||
return QueueThread::resume();
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD MessageThread::wait(DWORD timeout)const
|
||||
{
|
||||
return QueueThread::wait(timeout);
|
||||
}
|
||||
|
||||
inline
|
||||
void MessageThread::isAlertable(WORD isAlertable)
|
||||
{
|
||||
mMessageQueue.isAlertable(isAlertable);
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user