| 1 | /** | 
 
 
 
 
 | 2 | * This file has no copyright assigned and is placed in the Public Domain. | 
 
 
 
 
 | 3 | * This file is part of the mingw-w64 runtime package. | 
 
 
 
 
 | 4 | * No warranty is given; refer to the file DISCLAIMER.PD within this package. | 
 
 
 
 
 | 5 | */ | 
 
 
 
 
 | 6 | #ifndef __MSPTHRD_H | 
 
 
 
 
 | 7 | #define __MSPTHRD_H | 
 
 
 
 
 | 8 |  | 
 
 
 
 
 | 9 | typedef enum { | 
 
 
 
 
 | 10 | WORK_ITEM,STOP | 
 
 
 
 
 | 11 | } COMMAND; | 
 
 
 
 
 | 12 |  | 
 
 
 
 
 | 13 | typedef struct { | 
 
 
 
 
 | 14 | COMMAND cmd; | 
 
 
 
 
 | 15 | LPTHREAD_START_ROUTINE pfn; | 
 
 
 
 
 | 16 | PVOID pContext; | 
 
 
 
 
 | 17 | HANDLE hEvent; | 
 
 
 
 
 | 18 | } COMMAND_NODE; | 
 
 
 
 
 | 19 |  | 
 
 
 
 
 | 20 | typedef struct { | 
 
 
 
 
 | 21 | LIST_ENTRY link; | 
 
 
 
 
 | 22 | COMMAND_NODE node; | 
 
 
 
 
 | 23 | } COMMAND_QUEUE_ITEM; | 
 
 
 
 
 | 24 |  | 
 
 
 
 
 | 25 | typedef struct _NOTIF_LIST { | 
 
 
 
 
 | 26 | CMSPAddress *addr; | 
 
 
 
 
 | 27 | _NOTIF_LIST *next; | 
 
 
 
 
 | 28 | } NOTIF_LIST,*PNOTIF_LIST; | 
 
 
 
 
 | 29 |  | 
 
 
 
 
 | 30 | class CMSPThread { | 
 
 
 
 
 | 31 | public: | 
 
 
 
 
 | 32 | CMSPThread() { | 
 
 
 
 
 | 33 | InitializeListHead(&m_CommandQueue); | 
 
 
 
 
 | 34 | m_hCommandEvent = NULL; | 
 
 
 
 
 | 35 | m_hThread = NULL; | 
 
 
 
 
 | 36 | m_NotifList = NULL; | 
 
 
 
 
 | 37 | m_iStartCount = 0; | 
 
 
 
 
 | 38 | } | 
 
 
 
 
 | 39 | ~CMSPThread() { }; | 
 
 
 
 
 | 40 | HRESULT Start(); | 
 
 
 
 
 | 41 | HRESULT Stop(); | 
 
 
 
 
 | 42 | HRESULT Shutdown(); | 
 
 
 
 
 | 43 | HRESULT ThreadProc(); | 
 
 
 
 
 | 44 | static LRESULT CALLBACK NotifWndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam); | 
 
 
 
 
 | 45 | HRESULT RegisterPnpNotification(CMSPAddress *pCMSPAddress); | 
 
 
 
 
 | 46 | HRESULT UnregisterPnpNotification(CMSPAddress *pCMSPAddress); | 
 
 
 
 
 | 47 | HRESULT QueueWorkItem(LPTHREAD_START_ROUTINE Function,PVOID Context,WINBOOL fSynchronous); | 
 
 
 
 
 | 48 | private: | 
 
 
 
 
 | 49 | WINBOOL SignalThreadProc() { return SetEvent(m_hCommandEvent); } | 
 
 
 
 
 | 50 | CMSPCritSection m_CountLock; | 
 
 
 
 
 | 51 | CMSPCritSection m_QueueLock; | 
 
 
 
 
 | 52 | int m_iStartCount; | 
 
 
 
 
 | 53 | LIST_ENTRY m_CommandQueue; | 
 
 
 
 
 | 54 | HANDLE m_hCommandEvent; | 
 
 
 
 
 | 55 | HANDLE m_hThread; | 
 
 
 
 
 | 56 | HDEVNOTIFY m_hDevNotifyVideo; | 
 
 
 
 
 | 57 | HDEVNOTIFY m_hDevNotifyAudio; | 
 
 
 
 
 | 58 | HWND m_hWndNotif; | 
 
 
 
 
 | 59 | PNOTIF_LIST m_NotifList; | 
 
 
 
 
 | 60 | CMSPCritSection m_NotifLock; | 
 
 
 
 
 | 61 | }; | 
 
 
 
 
 | 62 |  | 
 
 
 
 
 | 63 | extern CMSPThread g_Thread; | 
 
 
 
 
 | 64 | #endif |