modules/up/src/Core/sched/Timer.cc

/* [<][>]
[^][v][top][bottom][index][help] */

FUNCTIONS

This source file includes following functions.
  1. Timer
  2. Timer
  3. ITimer
  4. handle
  5. restart
  6. stop

   1 //
   2 // $Id: Timer.cc,v 1.1.1.1 2000/03/10 16:32:22 engin Exp $
   3 //
   4 // Timer.cc
   5 // Author(s): Ramesh Govindan <govindan@isi.edu>
   6 
   7 #ifdef HAVE_CONFIG_H
   8 #include <config.h>
   9 #endif
  10 
  11 #include "util/Types.hh"
  12 #include "util/Handler.hh"
  13 #include "util/List.hh"
  14 #include "util/Trail.hh"
  15 
  16 #include "sys/Time.hh"
  17 #include "sched/Timer.hh"
  18 #include "sched/Dispatcher.hh"
  19 
  20 // File local variables
  21 static TraceCode traceTimer("timer");
  22 
  23 // The one-shot timer callback is initiated by the dispatcher.
  24 // Typically, we emulate periodic timers by re-creating a new
  25 // timer from the handler.
  26 
  27 Timer::Timer(const Handler& h,
     /* [<][>][^][v][top][bottom][index][help] */
  28              const TimeLong& at)
  29         : ListNode(), expireAt(at), handler(h), pending_(true)
  30 {
  31     dispatcher.timers.insertSorted(this);
  32     TRACE(traceTimer,
  33           "creating new timer\n");
  34 }
  35 
  36 Timer::~Timer()
     /* [<][>][^][v][top][bottom][index][help] */
  37 {
  38         if (pending_) {
  39                 dispatcher.timers.remove(this);
  40                 TRACE(traceTimer,
  41                       "dequeuing and freeing timer\n");
  42         }
  43 }
  44 
  45 bool
  46 Timer::operator<(const Timer& t) const 
  47 {
  48     return (expireAt < t.expireAt);
  49 }
  50 
  51 bool
  52 Timer::operator==(const Timer& t) const
  53 {
  54     return (expireAt == t.expireAt);
  55 }
  56 
  57 ITimer::ITimer(const Handler& h,
     /* [<][>][^][v][top][bottom][index][help] */
  58                const TimeShort& ival) 
  59         : Timer(h, dispatcher.systemClock+ival), 
  60           ival_(ival) {
  61 }
  62 
  63 void
  64 ITimer::handle() {
     /* [<][>][^][v][top][bottom][index][help] */
  65         restart();
  66         if (!handler.null())
  67                 handler.callBack((void*) this);
  68 }
  69 void
  70 ITimer::restart() {
     /* [<][>][^][v][top][bottom][index][help] */
  71         if (pending_) 
  72                 dispatcher.timers.remove(this);
  73         expireAt= dispatcher.systemClock + ival_;
  74         dispatcher.timers.insertSorted(this);
  75         pending_= true;
  76         TRACE(traceTimer,
  77               "rescheduled interval timer\n");
  78 }
  79 void 
  80 ITimer::stop() {
     /* [<][>][^][v][top][bottom][index][help] */
  81         if (pending_) {
  82                 pending_= false;
  83                 dispatcher.timers.remove(this);
  84         }
  85 }
  86 // 
  87 //  Copyright (c) 1994 by the University of Southern California.
  88 //  All rights reserved.
  89 //
  90 //  Permission to use, copy, modify, and distribute this software and
  91 //  its documentation in source and binary forms for lawful
  92 //  non-commercial purposes and without fee is hereby granted, provided
  93 //  that the above copyright notice appear in all copies and that both
  94 //  the copyright notice and this permission notice appear in supporting
  95 //  documentation, and that any documentation, advertising materials,
  96 //  and other materials related to such distribution and use acknowledge
  97 //  that the software was developed by the University of Southern
  98 //  California and/or Information Sciences Institute.
  99 //  The name of the University of Southern California may not
 100 //  be used to endorse or promote products derived from this software
 101 //  without specific prior written permission.
 102 //
 103 //  THE UNIVERSITY OF SOUTHERN CALIFORNIA DOES NOT MAKE ANY REPRESENTATIONS
 104 //  ABOUT THE SUITABILITY OF THIS SOFTWARE FOR ANY PURPOSE.  THIS SOFTWARE IS
 105 //  PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES,
 106 //  INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
 107 //  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND 
 108 //  NON-INFRINGEMENT.
 109 //
 110 //  IN NO EVENT SHALL USC, OR ANY OTHER CONTRIBUTOR BE LIABLE FOR ANY
 111 //  SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, WHETHER IN CONTRACT,
 112 //  TORT, OR OTHER FORM OF ACTION, ARISING OUT OF OR IN CONNECTION WITH,
 113 //  THE USE OR PERFORMANCE OF THIS SOFTWARE.
 114 //
 115 //  Questions concerning this software should be directed to 
 116 //  info-ra@isi.edu.
 117 //

/* [<][>][^][v][top][bottom][index][help] */