83 lines
1.9 KiB
C++
83 lines
1.9 KiB
C++
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (C) Microsoft Corporation, 1992 - 1995.
|
||
|
//
|
||
|
// File: PQueue.cxx
|
||
|
//
|
||
|
// Purpose: 'Pending' queue. Queue of pending notifications.
|
||
|
//
|
||
|
// Classes: CPendingQueue
|
||
|
//
|
||
|
// History: 30-Aug-95 KyleP Created
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Class: CPendingQueue
|
||
|
//
|
||
|
// Purpose: Queue of pending notifications
|
||
|
//
|
||
|
// History: 30-Aug-95 KyleP Created.
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
class CPendingQueue
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
//
|
||
|
// Construction and destruction
|
||
|
//
|
||
|
|
||
|
CPendingQueue();
|
||
|
|
||
|
~CPendingQueue();
|
||
|
|
||
|
//
|
||
|
// Queue operations
|
||
|
//
|
||
|
|
||
|
unsigned LokPrepare( WORKID wid );
|
||
|
|
||
|
BOOL LokComplete( unsigned iHint, WORKID wid, USN usn, VOLUMEID volumeId, PARTITIONID partid, ULONG action );
|
||
|
|
||
|
BOOL LokRemove( WORKID & wid, USN & usn, VOLUMEID& volumeId, PARTITIONID & partid, ULONG & action );
|
||
|
|
||
|
unsigned LokCountCompleted();
|
||
|
|
||
|
void LokGetCompleted( WORKID * awid );
|
||
|
|
||
|
CMutexSem& GetMutex () { return _mutex; }
|
||
|
|
||
|
void LokFlushCompletedEntries();
|
||
|
|
||
|
void LokFlushAllEntries();
|
||
|
|
||
|
private:
|
||
|
|
||
|
class CDocItem
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
USN usn;
|
||
|
VOLUMEID volumeId;
|
||
|
WORKID wid;
|
||
|
PARTITIONID partid;
|
||
|
ULONG action;
|
||
|
unsigned hint;
|
||
|
BOOL fComplete;
|
||
|
};
|
||
|
|
||
|
unsigned _cUnique; // Unique cookie
|
||
|
unsigned _iBottom; // Bottom of queue. Used to optimize ::Remove
|
||
|
unsigned _iTop; // First free element at top of queue.
|
||
|
unsigned _cDoc; // Size of queue
|
||
|
CDocItem * _aDoc; // Queue itself.
|
||
|
CMutexSem _mutex; // It gets it's own lock.
|
||
|
};
|
||
|
|