266 lines
5.2 KiB
C++
266 lines
5.2 KiB
C++
//+--------------------------------------------------------------------------
|
|
//
|
|
// Copyright (c) 1997-1999 Microsoft Corporation
|
|
//
|
|
// File: wkstore.h
|
|
//
|
|
// Contents:
|
|
//
|
|
// History:
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
#ifndef __WORKSTORAGE_H__
|
|
#define __WORKSTORAGE_H__
|
|
|
|
#include "tlsjob.h"
|
|
|
|
//--------------------------------------------------------------
|
|
//
|
|
// Work Object initialization function, each work object
|
|
// must supply its own initialization routine to work
|
|
// manager.
|
|
//
|
|
typedef CWorkObject* (WINAPI *PWorkObjectInitFunc)(
|
|
CWorkManager* pWkMgr,
|
|
PBYTE pbInitData,
|
|
DWORD cbInitData
|
|
);
|
|
|
|
typedef void (WINAPI *PWorkObjectDeleteFunc)(CWorkObject* ptr);
|
|
|
|
//------------------------------------------------------
|
|
//
|
|
// Work object initialization routine
|
|
//
|
|
typedef struct _WorkObjectInitFunc {
|
|
DWORD m_WorkType;
|
|
PWorkObjectInitFunc m_WorkInitFunc;
|
|
} WORKOBJECTINITFUNC;
|
|
|
|
typedef enum {
|
|
WORKITEM_ADD=1,
|
|
WORKITEM_BEGINPROCESSING,
|
|
WORKITEM_RESCHEDULE,
|
|
WORKITEM_DELETE
|
|
} WORKITEM_OPERATION;
|
|
|
|
|
|
class CPersistentWorkStorage : public CWorkStorage {
|
|
private:
|
|
DWORD m_dwStartupTime;
|
|
CSafeCounter m_dwNumJobs;
|
|
CSafeCounter m_dwJobsInProcesssing;
|
|
|
|
|
|
//
|
|
// m_hNextJobLock guard ...
|
|
//
|
|
CCriticalSection m_hTableLock;
|
|
CSafeCounter m_dwNextJobTime;
|
|
CWorkObject* m_pNextWorkObject;
|
|
|
|
//PBYTE m_pbCurrentBookmark;
|
|
//DWORD m_cbCurrentBookmark;
|
|
|
|
//
|
|
// Table must be updatable,
|
|
//
|
|
WorkItemTable* m_pWkItemTable;
|
|
|
|
void
|
|
UpdateNextJobTime(DWORD dwTime) { m_dwNextJobTime=dwTime; }
|
|
|
|
DWORD
|
|
StartupUpdateExistingJobTime();
|
|
|
|
//
|
|
//
|
|
//
|
|
BOOL
|
|
ReturnJobToQueue(
|
|
IN DWORD dwTime,
|
|
IN CWorkObject* ptr
|
|
);
|
|
|
|
//
|
|
//
|
|
//
|
|
BOOL
|
|
DeleteErrorJob(
|
|
IN CWorkObject* ptr
|
|
);
|
|
|
|
BOOL
|
|
UpdateJobEntry(
|
|
IN WorkItemTable* pTable,
|
|
IN PBYTE pbBookmark,
|
|
IN DWORD cbBoolmark,
|
|
IN WORKITEMRECORD& wkItem
|
|
);
|
|
|
|
BOOL
|
|
AddJobEntry(
|
|
IN WorkItemTable* pTable,
|
|
IN WORKITEMRECORD& wkItem
|
|
);
|
|
|
|
BOOL
|
|
DeleteJobEntry(
|
|
IN WorkItemTable* pTable,
|
|
IN PBYTE pbBookmark,
|
|
IN DWORD cbBookmark,
|
|
IN WORKITEMRECORD& wkItem
|
|
);
|
|
|
|
BOOL
|
|
UpdateWorkItemEntry(
|
|
IN WorkItemTable* pTable,
|
|
IN WORKITEM_OPERATION opCode,
|
|
IN PBYTE pbBookmark,
|
|
IN DWORD cbBookmark,
|
|
IN DWORD dwRestartTime,
|
|
IN DWORD dwTime,
|
|
IN DWORD dwJobType,
|
|
IN PBYTE pbJobData,
|
|
IN DWORD cbJobData
|
|
);
|
|
|
|
|
|
BOOL
|
|
IsValidWorkObject(
|
|
CWorkObject* ptr
|
|
);
|
|
|
|
DWORD
|
|
GetCurrentBookmarkEx(
|
|
IN WorkItemTable* pTable,
|
|
IN OUT PBYTE* ppbData,
|
|
IN OUT PDWORD pcbData
|
|
);
|
|
|
|
DWORD
|
|
GetCurrentBookmark(
|
|
IN WorkItemTable* pTable,
|
|
IN PBYTE ppbData,
|
|
IN OUT PDWORD pcbData
|
|
);
|
|
|
|
DWORD
|
|
SetCurrentBookmark(
|
|
IN WorkItemTable* pTable,
|
|
IN PBYTE pbData,
|
|
IN DWORD cbData
|
|
);
|
|
|
|
BOOL
|
|
RescheduleJob(
|
|
CWorkObject* ptr
|
|
);
|
|
|
|
CWorkObject*
|
|
GetCurrentJob(
|
|
PDWORD pdwTime
|
|
);
|
|
|
|
DWORD
|
|
FindNextJob();
|
|
|
|
|
|
CWorkObject*
|
|
InitializeWorkObject(
|
|
DWORD dwWorkType,
|
|
PBYTE pbData,
|
|
DWORD cbData
|
|
);
|
|
|
|
BOOL
|
|
DeleteWorkObject(
|
|
CWorkObject* ptr
|
|
);
|
|
|
|
public:
|
|
CPersistentWorkStorage(
|
|
WorkItemTable* pUpdateWkItemTable = NULL
|
|
);
|
|
|
|
~CPersistentWorkStorage();
|
|
|
|
//--------------------------------------------------------
|
|
BOOL
|
|
AttachTable(
|
|
IN WorkItemTable* pWkTable
|
|
)
|
|
/*++
|
|
|
|
--*/
|
|
{
|
|
if(pWkTable != NULL)
|
|
{
|
|
m_pWkItemTable = pWkTable;
|
|
}
|
|
else
|
|
{
|
|
SetLastError(ERROR_INVALID_PARAMETER);
|
|
}
|
|
|
|
return pWkTable != NULL;
|
|
}
|
|
|
|
//--------------------------------------------------------
|
|
BOOL
|
|
IsGood();
|
|
|
|
//--------------------------------------------------------
|
|
virtual BOOL
|
|
Startup(
|
|
IN CWorkManager* pWkMgr
|
|
);
|
|
|
|
//--------------------------------------------------------
|
|
virtual BOOL
|
|
Shutdown();
|
|
|
|
//--------------------------------------------------------
|
|
virtual BOOL
|
|
AddJob(
|
|
DWORD dwJobTime,
|
|
CWorkObject* ptr
|
|
);
|
|
|
|
//--------------------------------------------------------
|
|
virtual DWORD
|
|
GetNextJobTime();
|
|
|
|
//--------------------------------------------------------
|
|
virtual CWorkObject*
|
|
GetNextJob(
|
|
PDWORD pdwTime
|
|
);
|
|
|
|
//--------------------------------------------------------
|
|
virtual BOOL
|
|
EndProcessingJob(
|
|
IN ENDPROCESSINGJOB_CODE opCode,
|
|
IN DWORD dwOriginalTime,
|
|
IN CWorkObject* ptr
|
|
);
|
|
|
|
//--------------------------------------------------------
|
|
virtual DWORD
|
|
GetNumJobs()
|
|
{
|
|
return m_dwNumJobs;
|
|
}
|
|
|
|
//-------------------------------------------------------
|
|
virtual BOOL
|
|
BeginProcessingJob(
|
|
CWorkObject* pJob
|
|
);
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif
|