diff options
Diffstat (limited to 'maildrop/alarm.h')
| -rw-r--r-- | maildrop/alarm.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/maildrop/alarm.h b/maildrop/alarm.h new file mode 100644 index 0000000..01d926c --- /dev/null +++ b/maildrop/alarm.h @@ -0,0 +1,42 @@ +#ifndef alarm_h +#define alarm_h + + +////////////////////////////////////////////////////////////////////////////// +// +// This is an asynchronous timer function that is driven by the alarm() +// system call. I attempt to implement here a half-baked multiple timer +// feature. +// +// Note - you can't really do a lot in a signal handler, stick to setting +// global flags, and making system calls ( **NOT** standard library calls). +// +////////////////////////////////////////////////////////////////////////////// + +#include "config.h" + +class Alarm; + +class Alarm { + +static Alarm *first, *last; + + Alarm *next, *prev; // List sorted by expiration interval. + unsigned set_interval; // For how many seconds we're set. + + void Unlink(); + +static void cancel_sig(unsigned); +static void set_sig(); +static RETSIGTYPE alarm_func(int); +static unsigned sig_left(); +public: + Alarm() : next(0), prev(0), set_interval(0) {} + virtual ~Alarm(); + + virtual void handler()=0; + + void Set(unsigned); + void Cancel(); +} ; +#endif |
