12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- /**
- * This file has no copyright assigned and is placed in the Public Domain.
- * This file is part of the mingw-w64 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
|