123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- class CMsg {
- public:
- UINT uMsg;
- DWORD dwFlags;
- LPVOID lpParam;
- CAMEvent *pEvent;
- CMsg(UINT u, DWORD dw, __inout_opt LPVOID lp, __in_opt CAMEvent *pEvnt)
- : uMsg(u), dwFlags(dw), lpParam(lp), pEvent(pEvnt) {}
- CMsg()
- : uMsg(0), dwFlags(0L), lpParam(NULL), pEvent(NULL) {}
- };
- class AM_NOVTABLE CMsgThread {
- private:
- static DWORD WINAPI DefaultThreadProc(__inout LPVOID lpParam);
- DWORD m_ThreadId;
- HANDLE m_hThread;
- protected:
-
-
- CGenericList<CMsg> m_ThreadQueue;
- CCritSec m_Lock;
- HANDLE m_hSem;
- LONG m_lWaiting;
- public:
- CMsgThread()
- : m_ThreadId(0),
- m_hThread(NULL),
- m_lWaiting(0),
- m_hSem(NULL),
-
- m_ThreadQueue(NAME("MsgThread list"), 5)
- {
- }
- ~CMsgThread();
-
-
- void virtual GetThreadMsg(__out CMsg *msg);
-
- virtual void OnThreadInit() {
- };
- BOOL CreateThread();
- BOOL WaitForThreadExit(__out LPDWORD lpdwExitCode) {
- if (m_hThread != NULL) {
- WaitForSingleObject(m_hThread, INFINITE);
- return GetExitCodeThread(m_hThread, lpdwExitCode);
- }
- return FALSE;
- }
- DWORD ResumeThread() {
- return ::ResumeThread(m_hThread);
- }
- DWORD SuspendThread() {
- return ::SuspendThread(m_hThread);
- }
- int GetThreadPriority() {
- return ::GetThreadPriority(m_hThread);
- }
- BOOL SetThreadPriority(int nPriority) {
- return ::SetThreadPriority(m_hThread, nPriority);
- }
- HANDLE GetThreadHandle() {
- return m_hThread;
- }
- DWORD GetThreadId() {
- return m_ThreadId;
- }
- void PutThreadMsg(UINT uMsg, DWORD dwMsgFlags,
- __in_opt LPVOID lpMsgParam, __in_opt CAMEvent *pEvent = NULL) {
- CAutoLock lck(&m_Lock);
- CMsg* pMsg = new CMsg(uMsg, dwMsgFlags, lpMsgParam, pEvent);
- m_ThreadQueue.AddTail(pMsg);
- if (m_lWaiting != 0) {
- ReleaseSemaphore(m_hSem, m_lWaiting, 0);
- m_lWaiting = 0;
- }
- }
-
-
-
-
- virtual LRESULT ThreadMessageProc(
- UINT uMsg, DWORD dwFlags, __inout_opt LPVOID lpParam, __in_opt CAMEvent *pEvent) = 0;
- };
|