diff options
author | Benoit Foucher <benoit@zeroc.com> | 2005-04-01 15:42:10 +0000 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2005-04-01 15:42:10 +0000 |
commit | f496752b90c2d5c9099b7dbca383bd30820a6ebd (patch) | |
tree | daba3e307aea127eccb2b1c50fe9353f18f1ca05 /cpp/src/IceGrid/WaitQueue.h | |
parent | ObjectNotExistException is now retried. (diff) | |
download | ice-f496752b90c2d5c9099b7dbca383bd30820a6ebd.tar.bz2 ice-f496752b90c2d5c9099b7dbca383bd30820a6ebd.tar.xz ice-f496752b90c2d5c9099b7dbca383bd30820a6ebd.zip |
Copied IcePack code to IceGrid.
Diffstat (limited to 'cpp/src/IceGrid/WaitQueue.h')
-rw-r--r-- | cpp/src/IceGrid/WaitQueue.h | 67 |
1 files changed, 67 insertions, 0 deletions
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 <IceUtil/Thread.h> + +#include <list> + +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<WaitItem> 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<WaitItemPtr> _waitQueue; + std::list<WaitItemPtr> _workQueue; + bool _destroyed; +}; + +typedef IceUtil::Handle<WaitQueue> WaitQueuePtr; + +} + +#endif |