WindowsXP-SP1/enduser/troubleshoot/tshoot/apgtspl.h
2020-09-30 16:53:49 +02:00

108 lines
3.2 KiB
C++

//
// MODULE: APGTSPL.H
//
// PURPOSE: Pool Queue shared variables
//
// PROJECT: Generic Troubleshooter DLL for Microsoft AnswerPoint
//
// COMPANY: Saltmine Creative, Inc. (206)-284-7511 support@saltmine.com
//
// AUTHOR: Roman Mach
//
// ORIGINAL DATE: 8-2-96
//
// NOTES:
// 1. Based on Print Troubleshooter DLL
//
// Version Date By Comments
//--------------------------------------------------------------------
// V0.1 - RM Original
// V3.0 9/21/98 JM Pull out of apgts.h to separate header file.
// Working on encapsulation
//
#ifndef _H_APGTSPL
#define _H_APGTSPL
#include <windows.h>
#include <vector>
using namespace std;
// forward references
class CDBLoadConfiguration;
class CHTMLLog;
class CAbstractECB;
//
//
typedef struct _GTS_STATISTIC // for gathering DLL statistics
{
DWORD dwQueueItems;
DWORD dwWorkItems;
DWORD dwRollover; // unique per request while this DLL is loaded
} GTS_STATISTIC;
//
// promoting this from a struct to a class 1/4/99 JM. However, not fully encapsulating it.
class WORK_QUEUE_ITEM
{
WORK_QUEUE_ITEM(); // do not instantiate. No default constructor.
public:
HANDLE hImpersonationToken; // security thread should use while
// processing this work item
CAbstractECB *pECB; // ISAPI uses an EXTENSION_CONTROL_BLOCK
// to wrap CGI data. We have further
// abstracted this.
CDBLoadConfiguration *pConf; // registry, DSC files, all that stuff
CHTMLLog *pLog; // logging
GTS_STATISTIC GTSStat; // for gathering DLL statistics
WORK_QUEUE_ITEM(
HANDLE hImpersonationTokenIn,
CAbstractECB *pECBIn,
CDBLoadConfiguration *pConfIn,
CHTMLLog *pLogIn
) : hImpersonationToken(hImpersonationTokenIn),
pECB(pECBIn),
pConf(pConfIn),
pLog(pLogIn)
{}
~WORK_QUEUE_ITEM()
{}
};
class CPoolQueue {
public:
CPoolQueue();
~CPoolQueue();
DWORD GetStatus();
void Lock();
void Unlock();
void PushBack(WORK_QUEUE_ITEM * pwqi);
WORK_QUEUE_ITEM * GetWorkItem();
void DecrementWorkItems();
DWORD WaitForWork();
DWORD GetTotalWorkItems();
DWORD GetTotalQueueItems();
time_t GetTimeLastAdd();
time_t GetTimeLastRemove();
protected:
CRITICAL_SECTION m_csQueueLock; // must lock to add or delete from either list or to affect
// m_cInProcess or the various time_t variables.
HANDLE m_hWorkSem; // NT Semaphore handle for distributing requests to threads
// Wait on this semaphore for a work item from this queue
DWORD m_dwErr; // NOTE: once this is set nonzero, it can never be cleared.
vector<WORK_QUEUE_ITEM *> m_WorkQueue; // vector of WORK_QUEUE_ITEMs (queued up by
// APGTSExtension::StartRequest for working threads)
DWORD m_cInProcess; // # of items waiting in process (being worked on, vs.
// still in queue). Arbitrary, but acceptable, decision
// to track m_cInProcess in this class. JM 11/30/98
time_t m_timeLastAdd; // time last added an item to the queue
time_t m_timeLastRemove; // time an item was last removed from the queue
};
#endif // _H_APGTSPL