// $Id$
//
-// Copyright (C) 2007
-// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
-// Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
+// Copyright (C) 2007
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
// Stefan Bund <g0dil@berlios.de>
//
// This program is free software; you can redistribute it and/or modify
//#include "IntervalTimer.ih"
// Custom includes
-#include "Scheduler/Scheduler.hh"
+#include "../Scheduler/Scheduler.hh"
+#include "EventManager.hh"
//#include "IntervalTimer.mpp"
#define prefix_
prefix_ void senf::ppi::IntervalTimer::v_enable()
{
- info_.intervalStart = ClockService::now();
+ if (eventsPerInterval_ <= 0)
+ return;
+ info_.intervalStart = manager().now();
info_.number = 0;
schedule();
}
prefix_ void senf::ppi::IntervalTimer::v_disable()
{
- Scheduler::instance().cancelTimeout(id_);
+ timer_.disable();
}
prefix_ void senf::ppi::IntervalTimer::schedule()
{
info_.expected = info_.intervalStart + ( interval_ * (info_.number+1) ) / eventsPerInterval_;
- id_ = Scheduler::instance().timeout(info_.expected, boost::bind(&IntervalTimer::cb,this));
+ timer_.timeout(info_.expected);
}
prefix_ void senf::ppi::IntervalTimer::cb()
{
callback(info_, info_.expected);
+ if (! enabled())
+ return;
++ info_.number;
if (info_.number >= eventsPerInterval_) {
info_.number = 0;