summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/WaitQueue.h
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2005-04-01 15:42:10 +0000
committerBenoit Foucher <benoit@zeroc.com>2005-04-01 15:42:10 +0000
commitf496752b90c2d5c9099b7dbca383bd30820a6ebd (patch)
treedaba3e307aea127eccb2b1c50fe9353f18f1ca05 /cpp/src/IceGrid/WaitQueue.h
parentObjectNotExistException is now retried. (diff)
downloadice-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.h67
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