Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
mspthrd.h
Abstract:
Definitions for MSP thread management classes.
--*/
#ifndef __MSPTHRD_H #define __MSPTHRD_H
// // Commands that the worker worker thread can handle. //
typedef enum { WORK_ITEM, // process a work item STOP, // kill the worker thread.
} 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();
// Shutdown is used to clean up the thread unconditionally. This can be // used as an alternative to matched Start() / Stop() calls.
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, BOOL fSynchronous );
private: BOOL SignalThreadProc() { return SetEvent(m_hCommandEvent); }
private:
CMSPCritSection m_CountLock; // Protects start count CMSPCritSection m_QueueLock; // Protects command queue int m_iStartCount; // number of times we've been // started minus number of times // we've been stopped. If == 0 // then we actually stop thread. LIST_ENTRY m_CommandQueue; // Queue of commands for thread // to process. HANDLE m_hCommandEvent; // Signaled to tell us to do // something.
HANDLE m_hThread; // The thread handle. We need to // save it so that we can wait // for it when stopping the // thread.
HDEVNOTIFY m_hDevNotifyVideo; // Handles of device notification registration HDEVNOTIFY m_hDevNotifyAudio; // for video and audio devices.
HWND m_hWndNotif; // Window handle for notification window
PNOTIF_LIST m_NotifList; // List of notification functions to call // on a PNP event CMSPCritSection m_NotifLock; // Notification list critical section };
extern CMSPThread g_Thread;
#endif // __MSPTHRD_H
// eof
|