00001 00002 #include "_timer.h" 00003 00004 #include <string.h> 00005 #include <stdlib.h> 00006 #include <stdio.h> 00007 #include <signal.h> 00008 00009 static want_to_quit_tesleep = 0; 00010 00011 static void 00012 quit_tesleep (int sig) 00013 { 00014 want_to_quit_tesleep = 1; 00015 } 00016 main (int argc, char **argv) 00017 { 00018 double last_time; 00019 double cycle_time; 00020 double current_time; 00021 double max_time = 0.0; 00022 double min_time = 1e9; 00023 double start_time; 00024 double stop_time; 00025 int num_cycles; 00026 double total_time; 00027 int i; 00028 00029 if (argc > 1) 00030 { 00031 cycle_time = atof (argv[1]); 00032 } 00033 else 00034 { 00035 cycle_time = clk_tck (); 00036 } 00037 00038 if (argc > 2) 00039 { 00040 num_cycles = strtol (argv[2], NULL, 0); 00041 } 00042 else 00043 { 00044 num_cycles = 10000; 00045 } 00046 00047 signal (SIGINT, quit_tesleep); 00048 printf ("cycle_time = %f\n", cycle_time); 00049 printf ("num_cycles = %d\n", num_cycles); 00050 fflush (stdout); 00051 esleep (cycle_time); 00052 00053 start_time = last_time = etime (); 00054 for (i = 0; i < num_cycles && !want_to_quit_tesleep; i++) 00055 { 00056 esleep (cycle_time); 00057 current_time = etime (); 00058 if (current_time - last_time > max_time) 00059 { 00060 max_time = (current_time - last_time); 00061 } 00062 if (current_time - last_time < min_time) 00063 { 00064 min_time = (current_time - last_time); 00065 } 00066 last_time = current_time; 00067 } 00068 stop_time = etime (); 00069 total_time = stop_time - start_time; 00070 printf ("num_cycles = %d\n", i); 00071 printf ("total time = %f\n", total_time); 00072 printf ("avg cycle time = %f\n", (total_time) / i); 00073 printf ("min cycle time = %f\n", min_time); 00074 printf ("max cycle time = %f\n", max_time); 00075 00076 }