Pārlūkot izejas kodu

schev: faux_ev_time_left()

Serj Kalichev 5 gadi atpakaļ
vecāks
revīzija
9924a2cecb
2 mainītis faili ar 21 papildinājumiem un 0 dzēšanām
  1. 20 0
      faux/schev/ev.c
  2. 1 0
      faux/schev/private.h

+ 20 - 0
faux/schev/ev.c

@@ -156,6 +156,26 @@ int faux_ev_reschedule_interval(faux_ev_t *ev)
 }
 
 
+int faux_ev_time_left(faux_ev_t *ev, struct timespec *left)
+{
+	struct timespec now = {};
+
+	assert(ev);
+	assert(left);
+	if (!ev || !left)
+		return -1;
+
+	clock_gettime(FAUX_SCHEV_CLOCK_SOURCE, &now);
+	if (faux_timespec_cmp(&now, &ev->time) > 0) { // Already happend
+		faux_nsec_to_timespec(left, 0l);
+		return 0;
+	}
+	faux_timespec_diff(left, &ev->time, &now);
+
+	return 0;
+}
+
+
 int faux_ev_id(const faux_ev_t *ev)
 {
 	assert(ev);

+ 1 - 0
faux/schev/private.h

@@ -34,6 +34,7 @@ int faux_ev_periodic(faux_ev_t *ev,
 int faux_ev_dec_cycles(faux_ev_t *ev, int *new_cycles_num);
 int faux_ev_reschedule(faux_ev_t *ev, const struct timespec *new_time);
 int faux_ev_reschedule_interval(faux_ev_t *ev);
+int faux_ev_time_left(faux_ev_t *ev, struct timespec *left);
 
 int faux_ev_id(const faux_ev_t *ev);
 void *faux_ev_data(const faux_ev_t *ev);