#include "rcs_defs.hh"
#include "rcs_prnt.hh"
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include "_timer.h"
#include "_sem.h"
Include dependency graph for _timer.c:
Go to the source code of this file.
Defines | |
#define | NO_SCCS_IDS |
Functions | |
double | clk_tck () |
double | etime () |
void | esleep (double seconds_to_sleep) |
void | print_etime () |
Variables | |
int | etime_disabled = 0 |
double | etime_disable_time = 0.0 |
int | esleep_use_yield = 0 |
|
|
|
Definition at line 114 of file _timer.c. Referenced by UDPMEM::cancel_subscription(), esleep(), main(), nml_perf_combined_test(), nml_perf_read_test(), nml_perf_write_test(), rcs_sem_wait(), CMS_SERVER_REMOTE_UDP_PORT::recalculate_polling_interval(), CMS_SERVER_REMOTE_TCP_PORT::remove_subscription_client(), RCS_TIMER::set_timeout(), UDPMEM::setup_subscription(), and RCS_TIMER::zero_timer().
00115 { 00116 #ifdef VXWORKS 00117 #ifndef POWERPC 00118 if (global_timer_available) 00119 { 00120 return (1E-6); 00121 } 00122 #endif 00123 return 1.0 / (double) sysClkRateGet (); 00124 #define CLK_TCK_RETURNED 00125 #endif 00126 00127 #ifdef LYNX 00128 return 1.0 / (double) CLK_TCK; 00129 #define CLK_TCK_RETURNED 00130 #endif 00131 00132 #if defined(SUN) || defined(SGI) || defined(LINUX) || defined(darwin) || defined(qnx) 00133 return 1.0 / (double) sysconf (_SC_CLK_TCK); 00134 #define CLK_TCK_RETURNED 00135 #endif 00136 00137 #ifdef _Windows 00138 return (0.001); 00139 #define CLK_TCK_RETURNED 00140 #endif 00141 00142 #ifdef __MSDOS__ 00143 return (1.0 / (double) CLK_TCK); 00144 #define CLK_TCK_RETURNED 00145 #endif 00146 00147 #ifndef CLK_TCK_RETURNED 00148 #error No definition for clk tck for this platform. 00149 #endif 00150 } |
|
Definition at line 164 of file _timer.c. Referenced by RCS_TIMER::RCS_TIMER(), STCPMEM::STCPMEM(), CMS_SERVER_REMOTE_UDP_PORT::add_subscription_client(), UDPMEM::blocking_read(), NML::blocking_read(), NML::blocking_read_extended(), CMS::calculate_and_store_diag_info(), UDPMEM::call_on_server(), NML_MODULE::check_cycle_time_end(), NML_MODULE::check_cycle_time_start(), NODE::check_timer(), esleep(), GLOBMEM::get_access(), TCPMEM::get_diagnostics_info(), CMS_SERVER::get_user_keys(), NML_MODULE::loadDclock(), STCPMEM::login(), main(), GLOBMEM::main_access(), mem_get_access(), nml_perf_combined_test(), nml_perf_read_test(), nml_perf_write_test(), nml_watch(), STCPMEM::peek(), rcs_sem_wait(), STCPMEM::read(), RTLMEM::read(), FILEMEM::read(), TCPMEM::reconnect(), recvline(), recvn(), sendn(), RCS_TIMER::sync(), CMS_SERVER_REMOTE_UDP_PORT::update_subscriptions(), RCS_TIMER::wait(), NODE::wait_for_timer(), FILEMEM::write(), and RCS_TIMER::zero_timer().
00165 { 00166 #ifdef VXWORKS 00167 #ifdef USE_CLOCK_GETTIME 00168 double retval; 00169 struct timespec ts; 00170 #endif 00171 #ifndef POWERPC 00172 if (etime_disabled) 00173 { 00174 return (etime_disable_time); 00175 } 00176 if (global_timer_available) 00177 { 00178 return (((double) get_Global_time ()) * (1E-6)); 00179 } 00180 #endif 00181 00182 #ifdef USE_CLOCK_GETTIME 00183 if (etime_disabled) 00184 { 00185 return (etime_disable_time); 00186 } 00187 if (clock_gettime (CLOCK_REALTIME, &ts)) 00188 { 00189 /* rcs_print_error("clock_gettime: errno = %d %s\n", errno, strerror(errno)); */ 00190 } 00191 retval = ((double) ts.tv_sec) + ((double) ts.tv_nsec) * 1e-9; 00192 return retval; 00193 #else 00194 if (etime_disabled) 00195 { 00196 return (etime_disable_time); 00197 } 00198 return ((double) tickGet ()) / ((double) sysClkRateGet ()); 00199 #endif 00200 #define ETIME_RETURNED 00201 #endif 00202 00203 #if defined (sunos4) || defined (LYNX) || defined(irix5) || defined(sparcworks_sun4) 00204 double retval = 0.0; 00205 static double last_retval = 0.0; 00206 static struct timeval last_tp; 00207 00208 struct timeval tp; 00209 if (etime_disabled) 00210 { 00211 return (etime_disable_time); 00212 } 00213 if (gettimeofday (&tp, NULL) == -1) 00214 { 00215 rcs_print_error ("gettimeofday failed: (errno = %d) %s\n", errno, 00216 strerror (errno)); 00217 return 0.0; 00218 } 00219 retval = ((double) tp.tv_sec) + (((double) tp.tv_usec) / 1000000.0); 00220 return (retval); 00221 #define ETIME_RETURNED 00222 #endif 00223 00224 #if defined(sunos5) || (defined(os5) && defined(sparc)) || defined(irix6) || defined(irix64) 00225 double retval; 00226 struct timespec ts; 00227 00228 if (etime_disabled) 00229 { 00230 return (etime_disable_time); 00231 } 00232 if (clock_gettime (CLOCK_REALTIME, &ts)) 00233 { 00234 rcs_print_error ("clock_gettime: errno = %d %s\n", errno, 00235 strerror (errno)); 00236 } 00237 retval = ((double) ts.tv_sec) + ((double) ts.tv_nsec) * 1e-9; 00238 return retval; 00239 #define ETIME_RETURNED 00240 #endif 00241 00242 #if defined(LINUX) || defined(darwin) || defined(qnx) 00243 00244 struct timeval tp; 00245 double retval; 00246 #if 0 00247 static double last_retval = 0.0; 00248 #endif 00249 00250 if (0 != gettimeofday (&tp, NULL)) 00251 { 00252 rcs_print_error ("etime: can't get time\n"); 00253 return 0.0; 00254 } 00255 00256 retval = ((double) tp.tv_sec) + ((double) tp.tv_usec) / 1000000.0; 00257 #if 0 00258 if (retval < last_retval) 00259 { 00260 rcs_print_error ("etime: negative time interval\n"); 00261 return 0.0; 00262 } 00263 last_retval = retval; 00264 #endif 00265 return retval; 00266 00267 #define ETIME_RETURNED 00268 #endif /* LINUX */ 00269 00270 #ifdef _Windows 00271 #ifdef USE_TOOL_HELP 00272 /* The TimerCount function is more accurate than the GetTickCount() function 00273 but you need toolhelp.dll which comes with Windows 3.1 but not Windows 3.0 or 00274 Windows NT */ 00275 TIMERINFO timer_info; 00276 if (etime_disabled) 00277 { 00278 return (etime_disable_time); 00279 } 00280 if (TimerCount (&timer_info)) 00281 { 00282 return ((double) timer_info.dwmsSinceStart / 1000.0); 00283 } 00284 else 00285 { 00286 rcs_print_error ("etime: TimerCount returned false.\n"); 00287 return (0); 00288 } 00289 #define ETIME_RETURNED 00290 #else /* defined(_Windows) && defined(USE_TOOL_HELP) */ 00291 #if defined(WIN32) && !defined(UNDER_CE) 00292 BOOL frequency_ok = 0; 00293 BOOL counter_ok = 0; 00294 LARGE_INTEGER frequency; 00295 LARGE_INTEGER counter; 00296 double dfreq; 00297 double dcount; 00298 #define TWO_TO_THIRTYTWO (4294967296.00) 00299 #endif 00300 00301 if (etime_disabled) 00302 { 00303 return (etime_disable_time); 00304 } 00305 #if defined(WIN32) && !defined(UNDER_CE) 00306 frequency_ok = QueryPerformanceFrequency (&frequency); 00307 counter_ok = QueryPerformanceCounter (&counter); 00308 if (frequency_ok && counter_ok) 00309 { 00310 dfreq = frequency.HighPart * TWO_TO_THIRTYTWO + frequency.LowPart; 00311 dcount = counter.HighPart * TWO_TO_THIRTYTWO + counter.LowPart; 00312 if (dfreq > 0.0 && dcount > 0.0) 00313 { 00314 return (dcount / dfreq); 00315 } 00316 } 00317 #endif 00318 return ((double) GetTickCount () / 1000.0); 00319 #define ETIME_RETURNED 00320 #endif /* defined(_Windows) && defined(USE_TOOL_HELP) */ 00321 #endif 00322 00323 #if defined(__MSDOS__) && !defined(_Windows) 00324 #ifndef CLOCKS_PER_SECOND 00325 #define CLOCKS_PER_SECOND CLK_TCK 00326 #endif 00327 if (etime_disabled) 00328 { 00329 return (etime_disable_time); 00330 } 00331 return clock () / CLOCKS_PER_SECOND; 00332 #define ETIME_RETURNED 00333 00334 #endif /* __MSDOS__ */ 00335 00336 #ifndef ETIME_RETURNED 00337 #error NO definition for etime for this platform 00338 #endif 00339 } |
|
Definition at line 345 of file _timer.c. 00346 { 00347 #ifdef VXWORKS 00348 #if 1 00349 int t = (int) (seconds_to_sleep * (double) sysClkRateGet ()); 00350 00351 taskDelay (t <= 0 ? 1 : t); /* at least sleep a tick */ 00352 #else 00353 struct timespec nantime; 00354 nantime.tv_sec = (time_t) seconds_to_sleep; 00355 nantime.tv_nsec = ((double) (seconds_to_sleep - nantime.tv_sec) * 1e9); 00356 return nanosleep (&nantime, NULL); 00357 #endif 00358 return; 00359 #define ESLEEP_RETURNED 00360 00361 #endif 00362 00363 #if defined (SUN) || defined (LYNX) || defined(irix5) || defined(irix6) || defined(irix64) || defined(LINUX) || defined(darwin) || defined(qnx) 00364 #ifndef VXWORKS 00365 #if defined(sunos5) || defined(LINUX_KERNEL_2_2_OR_LATER) 00366 struct timeval tval; 00367 static double clk_tck_val = 0; 00368 double total = seconds_to_sleep; /* total sleep asked for */ 00369 double started = etime (); /* time when called */ 00370 double left = total; 00371 if (seconds_to_sleep <= 0.0) 00372 return; 00373 if (clk_tck_val <= 0) 00374 { 00375 clk_tck_val = clk_tck (); 00376 } 00377 do 00378 { 00379 if (left < clk_tck_val && esleep_use_yield) 00380 { 00381 #ifdef linux 00382 sched_yield (); 00383 #else 00384 yield (); 00385 #endif 00386 } 00387 else 00388 { 00389 tval.tv_sec = (long) left; /* double->long truncates, ANSI */ 00390 tval.tv_usec = (long) ((left - (double) tval.tv_sec) * 1000000.0); 00391 if (tval.tv_sec == 0 && tval.tv_usec == 0) 00392 { 00393 tval.tv_usec = 1; 00394 } 00395 if (select (0, NULL, NULL, NULL, &tval) < 0) 00396 { 00397 if (errno != EINTR) 00398 { 00399 break; 00400 } 00401 } 00402 } 00403 left = total - etime () + started; 00404 } 00405 while (left > 0 && (left > clk_tck_val && esleep_use_yield)); 00406 return; 00407 #define ESLEEP_RETURNED 00408 00409 #else 00410 unsigned int whole_seconds = (int) (seconds_to_sleep); 00411 unsigned int useconds = 00412 (int) ((seconds_to_sleep - ((double) whole_seconds)) * 1e6); 00413 if (seconds_to_sleep <= 1e-6) 00414 return; 00415 if (whole_seconds > 0) 00416 { 00417 sleep (whole_seconds); 00418 } 00419 if (useconds > 0) 00420 { 00421 usleep (useconds); 00422 } 00423 return; 00424 #define ESLEEP_RETURNED 00425 00426 #endif 00427 #if 0 00428 struct timespec rqtp, rmtp; 00429 rqtp.tv_sec = seconds_to_sleep; 00430 rqtp.tv_nsec = seconds_to_sleep * 1E9; 00431 if (seconds_to_sleep <= 0.0) 00432 return; 00433 if (nanosleep (&rqtp, NULL) < 0) 00434 { 00435 rcs_print_error ("nanosleep error %d %s\n", errno, strerror (errno)); 00436 } 00437 return; 00438 #define ESLEEP_RETURNED 00439 00440 #endif 00441 00442 #endif 00443 00444 #endif 00445 00446 #ifdef WIN32 00447 if (seconds_to_sleep <= 0.0) 00448 return; 00449 #ifndef UNDER_CE 00450 SleepEx (((unsigned long) (seconds_to_sleep * 1000)), FALSE); 00451 #else 00452 Sleep (seconds_to_sleep * 1000); 00453 #endif 00454 return; 00455 #define ESLEEP_RETURNED 00456 00457 #else 00458 00459 #if defined(WIN16) || defined(_MSC_VER) 00460 double t0, tf; 00461 if (seconds_to_sleep <= 0.0) 00462 return; 00463 t0 = etime (); 00464 tf = etime (); 00465 while ((tf - t0) < seconds_to_sleep) 00466 { 00467 #ifdef WINDOWS 00468 Yeild (); 00469 #endif 00470 tf = etime (); 00471 } 00472 return; 00473 00474 #define ESLEEP_RETURNED 00475 00476 #else 00477 #if defined(__MSDOS__) && !defined(_Windows) 00478 if (seconds_to_sleep <= 0.0) 00479 return; 00480 delay ((unsigned int) (seconds_to_sleep * 1000.0)); 00481 return; 00482 #define ESLEEP_RETURNED 00483 00484 #endif 00485 #endif 00486 #endif 00487 00488 #ifndef ESLEEP_RETURNED 00489 #error No definition for esleep for this platform. 00490 #endif 00491 00492 } |
|
Definition at line 498 of file _timer.c. Referenced by NO_DBG_MEM(), and rcsinfo().
00499 { 00500 printf ("etime = %f\n", etime ()); 00501 } |
|
|
|
|
|
|