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.
 
 
 
 
 
 

66 lines
2.4 KiB

//=============================================================================
// File: thread.h
// Author: a-jammar
//
// Copyright (c) 1998-1999 Microsoft Corporation
//
// This header file defines the class used to perform threaded refreshes in
// MSInfo (added late in the game). All refreshes should use this class.
//=============================================================================
#pragma once
class CFolder;
class CSystemInfo;
class CDataGatherer;
//-----------------------------------------------------------------------------
// This structure is used to communicate with the thread function. A pointer is
// passed when the thread function is called. We declare a static instance of
// the struct which will be reused.
//-----------------------------------------------------------------------------
class CThreadingRefresh;
struct SThreadInfo
{
volatile BOOL m_fShowData;
volatile BOOL m_fCancel; // cancel the current refresh, stay in thread
volatile BOOL m_fQuit; // exit the thread
volatile BOOL m_fRecursive; // refresh folders recursively
volatile BOOL m_fSoftRefresh; // if TRUE, don't force a refresh on existing data
CFolder * m_pFolder; // the folder to refresh
CSystemInfo * m_pSysInfo; // CSystemInfo to update when complete
CDataGatherer * m_pGatherer; // use this to refresh the data
CThreadingRefresh * m_pThreadRefresh;
HANDLE m_eventDone; // refresh thread fires when done
HANDLE m_eventStart; // main thread fires when more data
};
//static SThreadInfo threadinfo;
class CThreadingRefresh
{
public:
CThreadingRefresh(CDataGatherer * pGatherer);
~CThreadingRefresh();
BOOL IsRefreshing();
int PerchentageComplete();
void RefreshAll(CFolder * pFolder, volatile BOOL * pfCancel = NULL);
void RefreshFolder(CFolder * pFolder, BOOL fRecursive = FALSE, BOOL fSoftRefresh = FALSE);
void RefreshFolderAsync(CFolder * pFolder, CSystemInfo * pSysInfo, BOOL fRecursive = FALSE, BOOL fSoftRefresh = FALSE);
void CancelRefresh(BOOL fUpdateUI = TRUE);
void KillRefreshThread();
BOOL WaitForRefresh();
BOOL ResultsPaneNotAvailable();
void EnterCriticalSection() { ::EnterCriticalSection(&m_csThreadRefresh); };
void LeaveCriticalSection() { ::LeaveCriticalSection(&m_csThreadRefresh); };
private:
CDataGatherer * m_pGatherer;
HANDLE m_hThread;
DWORD m_dwThreadID;
SThreadInfo * m_pThreadInfo;
CRITICAL_SECTION m_csThreadRefresh;
};