// -------------------------------------------------------------------------- // 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_ */