/** * This file has no copyright assigned and is placed in the Public Domain. * This file is part of the w64 mingw-runtime package. * No warranty is given; refer to the file DISCLAIMER.PD within this package. */ #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