From f6987a16c9f246b2a3836e1f4a4162aa7b48f188 Mon Sep 17 00:00:00 2001 From: sage Date: Sat, 7 May 2005 00:05:19 +0000 Subject: [PATCH] *** empty log message *** git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@212 29311d96-e01e-0410-9327-a35deaab8ce9 --- ceph/common/Timer.cc | 42 ++++++++++++++++++++++++++++++++++++++++++ ceph/common/Timer.h | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 ceph/common/Timer.cc create mode 100644 ceph/common/Timer.h diff --git a/ceph/common/Timer.cc b/ceph/common/Timer.cc new file mode 100644 index 0000000000000..c691e9dd0c675 --- /dev/null +++ b/ceph/common/Timer.cc @@ -0,0 +1,42 @@ + + +#include "Timer.h" + +#include "include/config.h" + +#undef dout +#define dout(x) if (x <= g_conf.debug) cout << "Timer: " + + + +void Timer::execute_pending() +{ + double now = clock.gettime(); + dout(12) << "now = " << now << endl; + + while (event_map.size()) { + Context *event = 0; + + { // scope this so my iterator is destroyed quickly + // check first event + map::iterator it = event_map.begin(); + if (it->first > now) { + dout(12) << "next event at " << it->first << ", stopping" << endl; + break; // no events! + } + + // claim and remove from map + event = it->second; + event_map.erase(it); + + dout(5) << "executing event " << event << " scheduled for " << it->first << endl; + } + + // exec + assert(event); + event->finish(0); + delete event; + } + + dout(12) << "no more events for now" << endl; +} diff --git a/ceph/common/Timer.h b/ceph/common/Timer.h new file mode 100644 index 0000000000000..3915bfebba9fb --- /dev/null +++ b/ceph/common/Timer.h @@ -0,0 +1,41 @@ +#ifndef __TIMER_H +#define __TIMER_H + +/*** Timer + * schedule callbacks + */ + +class Timer { + + // event map: time -> context + map event_map; + + public: + + // schedule events + void add_event_after(double seconds, + Context *callback) { + add_event_at(clock.gettime(), callback); + } + + void add_event_at(double when, + Context *callback) { + + } + + // execute pending events + void execute_pending(); + +}; + + + + + + + + + + + +#endif -- 2.39.5