00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "stdinc.h"
00019
00020 #ifndef NO_CPU_TIME
00021 # include <sys/times.h>
00022 struct tms buffer;
00023 # include <unistd.h>
00024 static long ticks_per_sec = 0;
00025 #endif
00026
00027 #ifndef NO_CPU_TIME
00028 static real initial_cpu = 0;
00029 #endif
00030
00031
00032
00033
00034
00035 void cpu_init()
00036 {
00037 #ifndef NO_CPU_TIME
00038 times(&buffer);
00039
00040
00041
00042
00043 initial_cpu = (real) (buffer.tms_utime + buffer.tms_stime);
00044
00045 ticks_per_sec = sysconf(_SC_CLK_TCK);
00046 #endif
00047 }
00048
00049
00050
00051
00052
00053
00054 real cpu_time()
00055 {
00056 #ifndef NO_CPU_TIME
00057
00058 if (!ticks_per_sec)
00059 cpu_init();
00060
00061 times(&buffer);
00062 return ((real) (buffer.tms_utime + buffer.tms_stime - initial_cpu))
00063 / ticks_per_sec;
00064 #else
00065 return 0;
00066 #endif
00067 }
00068
00069
00070
00071 #ifdef HAS_NANOSLEEP
00072 #include <time.h>
00073 #endif
00074
00075 void starlab_wait(int iwait)
00076 {
00077 #ifdef HAS_USLEEP
00078 usleep(iwait);
00079 #else
00080 #ifdef HAS_NANOSLEEP
00081 timespec wait_time;
00082 twait_ime.tv_nsec = 1000*iwait;
00083 nanosleep(wait_time);
00084 #endif
00085 #endif
00086 }