| #ifndef __MSPTHRD_H | 
 | #define __MSPTHRD_H | 
 |  | 
 | typedef enum { | 
 |   WORK_ITEM,STOP | 
 | } COMMAND; | 
 |  | 
 | typedef struct { | 
 |   COMMAND cmd; | 
 |   LPTHREAD_START_ROUTINE pfn; | 
 |   PVOID pContext; | 
 |   HANDLE hEvent; | 
 | } COMMAND_NODE; | 
 |  | 
 | typedef struct { | 
 |   LIST_ENTRY link; | 
 |   COMMAND_NODE node; | 
 | } COMMAND_QUEUE_ITEM; | 
 |  | 
 | typedef struct _NOTIF_LIST { | 
 |   CMSPAddress *addr; | 
 |   _NOTIF_LIST *next; | 
 | } NOTIF_LIST,*PNOTIF_LIST; | 
 |  | 
 | class CMSPThread { | 
 | public: | 
 |   CMSPThread() { | 
 |     InitializeListHead(&m_CommandQueue); | 
 |     m_hCommandEvent = NULL; | 
 |     m_hThread = NULL; | 
 |     m_NotifList = NULL; | 
 |     m_iStartCount = 0; | 
 |   } | 
 |   ~CMSPThread() { }; | 
 |   HRESULT Start(); | 
 |   HRESULT Stop(); | 
 |   HRESULT Shutdown(); | 
 |   HRESULT ThreadProc(); | 
 |   static LRESULT CALLBACK NotifWndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam); | 
 |   HRESULT RegisterPnpNotification(CMSPAddress *pCMSPAddress); | 
 |   HRESULT UnregisterPnpNotification(CMSPAddress *pCMSPAddress); | 
 |   HRESULT QueueWorkItem(LPTHREAD_START_ROUTINE Function,PVOID Context,WINBOOL fSynchronous); | 
 | private: | 
 |   WINBOOL SignalThreadProc() { return SetEvent(m_hCommandEvent); } | 
 |   CMSPCritSection m_CountLock; | 
 |   CMSPCritSection m_QueueLock; | 
 |   int m_iStartCount; | 
 |   LIST_ENTRY m_CommandQueue; | 
 |   HANDLE m_hCommandEvent; | 
 |   HANDLE m_hThread; | 
 |   HDEVNOTIFY m_hDevNotifyVideo; | 
 |   HDEVNOTIFY m_hDevNotifyAudio; | 
 |   HWND m_hWndNotif; | 
 |   PNOTIF_LIST m_NotifList; | 
 |   CMSPCritSection m_NotifLock; | 
 | }; | 
 |  | 
 | extern CMSPThread g_Thread; | 
 | #endif |