summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAriadna Vigo <arivigodr@gmail.com>2020-12-11 17:08:41 +0100
committerAriadna Vigo <arivigodr@gmail.com>2020-12-11 17:08:41 +0100
commit5107a3b42c0b785a1273b2d72bfdbc9868ec1ea8 (patch)
tree8a5a5dace14273e5fe585b4715bea1f4a14b9158
parent1b984138943954c653ce62c1ab1061a8fa7de94a (diff)
Fixed huge CPU usage when timer is paused
-rw-r--r--minitimer.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/minitimer.c b/minitimer.c
index b53b19e..309ccc9 100644
--- a/minitimer.c
+++ b/minitimer.c
@@ -39,7 +39,8 @@ static void time_inc(struct time *the_time, int secs);
static int parse_time(char *time_str, struct time *the_time);
static struct termios ui_setup(struct termios *old);
-static void ui_update(const struct time *the_time, int run_status);
+static void ui_update(const struct time *the_time, int run_status,
+ int lap_status);
static int poll_event(int fifofd);
static void
@@ -160,7 +161,7 @@ ui_setup(struct termios *old)
}
static void
-ui_update(const struct time *the_time, int run_status)
+ui_update(const struct time *the_time, int run_status, int lap_status)
{
static struct time output;
@@ -169,7 +170,7 @@ ui_update(const struct time *the_time, int run_status)
printf("\r");
putchar((run_status > 0) ? run_ind : ' ');
- putchar((the_time == NULL) ? lap_ind : ' ');
+ putchar((lap_status > 0) ? lap_ind : ' ');
printf(outputfmt, output.hrs, output.mins, output.secs);
fflush(stdout);
@@ -216,7 +217,7 @@ int
main(int argc, char *argv[])
{
struct time the_time;
- int delta, parse_status, fifofd, timer_runs, ui_active;
+ int delta, parse_status, fifofd, timer_runs, lap_status;
char fifoname[FIFONAME_SIZE];
struct termios oldterm;
@@ -261,14 +262,14 @@ main(int argc, char *argv[])
ui_setup(&oldterm);
timer_runs = 1;
- ui_active = 1;
+ lap_status = 0;
while ((time_lt_zero(the_time) == 0)) {
switch (poll_event(fifofd)) {
case PAUSRES_EV:
timer_runs ^= 1;
break;
case LAP_EV:
- ui_active ^= 1;
+ lap_status ^= 1;
break;
case INCR_EV:
time_inc(&the_time, time_incr_secs);
@@ -278,11 +279,14 @@ main(int argc, char *argv[])
goto exit;
}
- ui_update((ui_active > 0) ? &the_time : NULL, timer_runs);
if (timer_runs > 0) {
time_inc(&the_time, delta);
- sleep(1);
- }
+ ui_update((lap_status > 0) ? NULL : &the_time,
+ timer_runs, lap_status);
+ } else {
+ ui_update(NULL, timer_runs, lap_status);
+ } /* XXX */
+ sleep(1);
}
exit: