// Copyright (c) 2004 David Muse // See the COPYING file for more information. #ifndef RUDIMENTS_INTERVALTIMER_H #define RUDIMENTS_INTERVALTIMER_H #include <rudiments/private/intervaltimerincludes.h> // The intervaltimer class provides methods for interfacing with // interval timers. #ifdef RUDIMENTS_NAMESPACE namespace rudiments { #endif class intervaltimerprivate; class intervaltimer { public: intervaltimer(int which); // Initialize the interval timer. "which" must be one // of: // ITIMER_REAL - decrements in real time, raises SIGALRM // ITIMER_VIRTUAL - decrements when the process is // executing but not during system // calls, raises SIGVTALRM // ITIMER_PROF - decrements when the process is // executing or and during system // calls, raises SIGPROF ~intervaltimer(); void initialize(); // Sets (or resets) the initial and periodic intervals // to 0 seconds and 0 microseconds. void setInitialInterval(long seconds, long microseconds); // Set the timer's initial interval to "seconds" // seconds and "microseconds" microseconds. void setInitialInterval(const timeval *tv); // Set the timer's initial interval to seconds and // microseconds specified in "tv". void setPeriodicInterval(long seconds, long microseconds); // Set the timer's periodic interval to "seconds" // seconds and "microseconds" microseconds. void setPeriodicInterval(const timeval *tv); // Set the timer's periodic interval to seconds and // microseconds specified in "tv". void setIntervals(long seconds, long microseconds); // Set the timer's initial and periodic intervals both // to "seconds" seconds and "microseconds" microseconds. void setIntervals(const timeval *tv); // Set the timer's initial and periodic intervals both // to seconds and microseconds specified in "tv". void setIntervals(const itimerval *itv); // Set the timer's initial and periodic intervals as // specified by "itv". void getInitialInterval(long *seconds, long *microseconds) const; // Set "seconds" and "microseconds" to the timer's // initial interval values. void getInitialInterval(timeval *tv) const; // Set "tv" to the timer's initial interval values. void getPeriodicInterval(long *seconds, long *microseconds) const; // Set "seconds" and "microseconds" to the timer's // periodic interval values. void getPeriodicInterval(timeval *tv) const; // Set "tv" to the timer's periodic interval values. void getIntervals(itimerval *itv) const; // Set "itv" to the timer's intial and periodic values. bool start() const; // Start (or restart) the timer. It will first run for // the initial interval, then raise a signal, then run // over and over for the periodic interval, raising the // signal at the end of each interval. bool start(itimerval *itv) const; // Start (or restart) the timer. It will first run for // the initial interval, then raise a signal, then run // over and over for the periodic interval, raising the // signal at the end of each interval. "itv" will be // set to the intervals that the timer was using prior // to calling start(). bool getTimeRemaining(long *seconds, long *microseconds) const; // Sets "seconds" and "microseconds" to the time // remaining before the timer will raise the signal. bool getTimeRemaining(timeval *tv) const; // Sets "tv" to the time remaining before the timer // will raise the signal. bool stop() const; // Stops the currently running timer, but preserves // it's initial and perodic intervals. #include <rudiments/private/intervaltimer.h> }; #ifdef RUDIMENTS_NAMESPACE } #endif #endif