From f496752b90c2d5c9099b7dbca383bd30820a6ebd Mon Sep 17 00:00:00 2001 From: Benoit Foucher Date: Fri, 1 Apr 2005 15:42:10 +0000 Subject: Copied IcePack code to IceGrid. --- cpp/src/IceGrid/WaitQueue.h | 67 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 cpp/src/IceGrid/WaitQueue.h (limited to 'cpp/src/IceGrid/WaitQueue.h') diff --git a/cpp/src/IceGrid/WaitQueue.h b/cpp/src/IceGrid/WaitQueue.h new file mode 100644 index 00000000000..f463c8051c2 --- /dev/null +++ b/cpp/src/IceGrid/WaitQueue.h @@ -0,0 +1,67 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2005 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +#ifndef ICE_GRID_WAIT_QUEUE_H +#define ICE_GRID_WAIT_QUEUE_H + +#include + +#include + +namespace IceGrid +{ + +class WaitItem : public ::IceUtil::SimpleShared +{ +public: + + WaitItem(const Ice::ObjectPtr&); + virtual ~WaitItem(); + + virtual void execute() = 0; + virtual void expired(bool) = 0; + + bool isWaitingOn(const Ice::ObjectPtr& obj) { return obj == _object; } + + const IceUtil::Time& getExpirationTime(); + void setExpirationTime(const IceUtil::Time&); + +private: + + Ice::ObjectPtr _object; + IceUtil::Time _expiration; +}; + +typedef IceUtil::Handle WaitItemPtr; + +class WaitQueue : public IceUtil::Thread, public IceUtil::Monitor< IceUtil::Mutex> +{ +public: + + WaitQueue(); + + virtual void run(); + void destroy(); + + void add(const WaitItemPtr&, const IceUtil::Time&); + + void notifyAllWaitingOn(const Ice::ObjectPtr&); + +private: + + std::list _waitQueue; + std::list _workQueue; + bool _destroyed; +}; + +typedef IceUtil::Handle WaitQueuePtr; + +} + +#endif -- cgit v1.2.3