fix blocking call in signal handler, switch to CPU nanosecond time
authorian <ian@kremlin.cc>
Thu, 30 Oct 2014 20:34:36 +0000 (16:34 -0400)
committerian <ian@kremlin.cc>
Thu, 30 Oct 2014 20:34:36 +0000 (16:34 -0400)
assgn7/timer.c

index 6d35ff54fe3c105afc63760dec5cab038ba8bc22..c8fef9879dc09573bad08a2466804106d0ce1d4d 100644 (file)
@@ -10,31 +10,29 @@ int done;
 
 void handle_start() {
 
-       if(clock_gettime(CLOCK_MONOTONIC, start_time) == -1) {
+       if(clock_gettime(CLOCK_PROCESS_CPUTIME_ID, start_time) == -1) {
 
                printf("failed to get start time.\n");
                exit(1);
        }
-
-       pause();
 }
 
 void handle_stop() {
 
        long int start_sec, stop_sec, delta;
 
-       if(clock_gettime(CLOCK_MONOTONIC, stop_time) == -1) {
+       if(clock_gettime(CLOCK_PROCESS_CPUTIME_ID, stop_time) == -1) {
 
                printf("failed to get stop time.\n");
                exit(1);
        }
 
-       start_sec = ((long int) start_time->tv_sec);
-       stop_sec  = ((long int) stop_time->tv_sec);
+       start_sec = ((long int) start_time->tv_nsec);
+       stop_sec  = ((long int) stop_time->tv_nsec);
 
        delta = stop_sec - start_sec;
 
-       printf("%ld seconds elapsed between signals.\n", delta);
+       printf("%ld nanoseconds elapsed between signals.\n", delta);
 
        done = 1;
 }
@@ -58,7 +56,7 @@ int main(int argc, char *argv[]) {
        pause();
 
        if(!done)
-               goto terminate_check;
+               goto terminate_check; /* sorry */
 
        free(start_time);
        free(stop_time);