|
Definition at line 345 of file _timer.c.
Referenced by CMS_SERVER_REMOTE_STCP_PORT::CMS_SERVER_REMOTE_STCP_PORT(), NML_QR_CLIENT::NML_QR_CLIENT(), STCPMEM::STCPMEM(), autokey_getkey(), NML::blocking_read(), NML::blocking_read_extended(), GLOBMEM::get_access(), main(), mem_get_access(), mem_release_access(), nmlWaitOpen(), rcs_exit(), TCPMEM::reconnect(), recvline(), recvn(), NML_QR_CLIENT::reset(), run_nml_servers(), sendn(), CMS_SERVER::spawn(), RCS_TIMER::wait(), wait_for_servers(), and NML_QR_CLIENT::~NML_QR_CLIENT().
00346 {
00347 #ifdef VXWORKS
00348 #if 1
00349 int t = (int) (seconds_to_sleep * (double) sysClkRateGet ());
00350
00351 taskDelay (t <= 0 ? 1 : t);
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;
00369 double started = etime ();
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;
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 }
|