69 lines
2.3 KiB
C++
69 lines
2.3 KiB
C++
// --------------------------------------------------------------------------
|
|
// Module Name: Queue.h
|
|
//
|
|
// Copyright (c) 1999-2000, Microsoft Corporation
|
|
//
|
|
// This file contains a class to handle a queue element and a class to handle
|
|
// a queue of queue elements.
|
|
//
|
|
// History: 1999-11-07 vtan created
|
|
// 2000-08-25 vtan moved from Neptune to Whistler
|
|
// --------------------------------------------------------------------------
|
|
|
|
#ifndef _Queue_
|
|
#define _Queue_
|
|
|
|
#include "DynamicObject.h"
|
|
#include "KernelResources.h"
|
|
|
|
// --------------------------------------------------------------------------
|
|
// CQueueElement
|
|
//
|
|
// Purpose: This is the queue element base class. It contains a field
|
|
// which the queue manages.
|
|
//
|
|
// History: 1999-11-07 vtan created
|
|
// 2000-08-25 vtan moved from Neptune to Whistler
|
|
// --------------------------------------------------------------------------
|
|
|
|
class CQueueElement : public CDynamicObject
|
|
{
|
|
private:
|
|
friend class CQueue;
|
|
public:
|
|
CQueueElement (void);
|
|
virtual ~CQueueElement (void);
|
|
private:
|
|
CQueueElement* _pNextElement;
|
|
};
|
|
|
|
// --------------------------------------------------------------------------
|
|
// CQueue
|
|
//
|
|
// Purpose: This is the queue manager class. It manages queue elements.
|
|
// Because the queue may be called from two threads that act on
|
|
// the same object (one thread reads the queue to process
|
|
// requests and the other adds to the queue to queue requests)
|
|
// a critical section is required to process queue manipulation.
|
|
//
|
|
// History: 1999-11-07 vtan created
|
|
// 2000-08-25 vtan moved from Neptune to Whistler
|
|
// --------------------------------------------------------------------------
|
|
|
|
class CQueue
|
|
{
|
|
public:
|
|
CQueue (void);
|
|
~CQueue (void);
|
|
|
|
void Add (CQueueElement *pQueueElement);
|
|
void Remove (void);
|
|
CQueueElement* Get (void) const;
|
|
private:
|
|
CQueueElement* _pQueue;
|
|
CCriticalSection _lock;
|
|
};
|
|
|
|
#endif /* _Queue_ */
|
|
|