windows-nt/Source/XPSP1/NT/admin/pchealth/sysinfo/control/refreshthread.h
2020-09-26 16:20:57 +08:00

61 lines
2 KiB
C++

//=============================================================================
// Define the classes and functions used to manage threaded WMI refreshes.
//=============================================================================
#pragma once
#include "category.h"
class CRefreshThread
{
friend DWORD WINAPI ThreadRefresh(void * pArg);
public:
CRefreshThread(HWND hwnd);
~CRefreshThread();
void StartRefresh(CMSInfoLiveCategory * pCategory, BOOL fRecursive = FALSE, BOOL fForceRefresh = FALSE);
void CancelRefresh();
void KillRefresh();
BOOL IsRefreshing();
BOOL WaitForRefresh();
void EnterCriticalSection() { ::EnterCriticalSection(&m_criticalsection); };
void LeaveCriticalSection() { ::LeaveCriticalSection(&m_criticalsection); };
BOOL GetForceRefresh() { return m_fForceRefresh; };
HRESULT CheckWMIConnection();
void GetRefreshStatus(LONG * pCount, CString * pstrCurrent)
{
::EnterCriticalSection(&m_csCategoryRefreshing);
*pCount = m_nCategoriesRefreshed;
*pstrCurrent = m_strCategoryRefreshing;
::LeaveCriticalSection(&m_csCategoryRefreshing);
};
public:
CMSInfoLiveCategory * m_pcategory; // category to refresh
CString m_strMachine; // machine from which to gather data
protected:
volatile BOOL m_fCancel; // cancel the current refresh, stay in thread
volatile BOOL m_fQuit; // exit the thread
volatile BOOL m_fRecursive; // refresh categories recursively
volatile BOOL m_fForceRefresh; // if TRUE, refigure all the cached data
volatile LONG m_nCategoriesRefreshed; // number of categories refreshed
CString m_strCategoryRefreshing; // category currently being refreshed
CRITICAL_SECTION m_csCategoryRefreshing; // critical section to guard the string
HANDLE m_eventDone; // refresh thread fires when done
HANDLE m_eventStart; // main thread fires when more data
CRITICAL_SECTION m_criticalsection;
HRESULT m_hresult;
HRESULT m_hrWMI;
HWND m_hwnd;
HANDLE m_hThread;
DWORD m_dwThreadID;
};