Use pause(2) to suspend timer ticking
See #4 for discussion about waiting for signals, instead of incrementing timecount with zero value.
This commit is contained in:
parent
906a6caa13
commit
0af77c1282
15
spt.c
15
spt.c
|
@ -24,7 +24,7 @@ typedef struct {
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
static int i, timecount, inc;
|
static int i, timecount, suspend;
|
||||||
|
|
||||||
/* function declarations */
|
/* function declarations */
|
||||||
static void die(const char *errstr, ...);
|
static void die(const char *errstr, ...);
|
||||||
|
@ -95,7 +95,8 @@ void
|
||||||
toggle(int sigint) {
|
toggle(int sigint) {
|
||||||
if (signal(SIGUSR2, SIG_IGN) != SIG_IGN)
|
if (signal(SIGUSR2, SIG_IGN) != SIG_IGN)
|
||||||
signal(SIGUSR2, toggle);
|
signal(SIGUSR2, toggle);
|
||||||
inc ^= 1;
|
|
||||||
|
suspend ^= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -107,7 +108,7 @@ usage(void)
|
||||||
int
|
int
|
||||||
main(int argc, char *argv[])
|
main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
inc = 1;
|
suspend = 0;
|
||||||
|
|
||||||
ARGBEGIN {
|
ARGBEGIN {
|
||||||
case 'e':
|
case 'e':
|
||||||
|
@ -131,8 +132,14 @@ main(int argc, char *argv[])
|
||||||
|
|
||||||
for (i = 0; ; i = (i + 1) % LEN(timers)) {
|
for (i = 0; ; i = (i + 1) % LEN(timers)) {
|
||||||
notify_send(timers[i].cmt);
|
notify_send(timers[i].cmt);
|
||||||
for (timecount = 0; timecount < timers[i].tmr; timecount += inc)
|
timecount = 0;
|
||||||
|
while (timecount < timers[i].tmr)
|
||||||
|
if (suspend)
|
||||||
|
pause();
|
||||||
|
else {
|
||||||
sleep(1);
|
sleep(1);
|
||||||
|
timecount++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user