#include MessageThread::MessageThread(bool startup) : mMessageThreadMutex("MessageThreadMutex") { if(startup)start(); } MessageThread::~MessageThread() { stop(); } void MessageThread::stop(void) { ThreadMessage threadMessage(ThreadMessage::TM_DESTROY,0L,0L,ThreadMessage::PriorityHigh); if(!isRunning())return; QueueThread::stop(); resume(); sendMessage(threadMessage); removeHandlers(); wait(INFINITE); mMessageQueue.shutdownQueue(); } WORD MessageThread::insertHandler(PureThreadCallback *lpThreadCallback) { WORD returnCode; mMessageThreadMutex.requestMutex(); mThreadCallback.insert(&ThreadCallbackPointer(lpThreadCallback)); returnCode=mThreadCallback.size(); mMessageThreadMutex.releaseMutex(); return returnCode; } void MessageThread::removeHandler(PureThreadCallback *lpThreadCallback) { size_t itemCount; mMessageThreadMutex.requestMutex(); itemCount=(size_t)mThreadCallback.size(); for(short vectorIndex=0;vectorIndex