Main Page   Class Hierarchy   Alphabetical List   Data Structures   File List   Data Fields   Globals  

_timer.h File Reference

#include "rcs_defs.hh"

Include dependency graph for _timer.h:

Include dependency graph

This graph shows which files directly or indirectly include this file:

Included by dependency graph

Go to the source code of this file.

Functions

double clk_tck (void)
double RCS_EXPORT etime (void)
void RCS_EXPORT esleep (double secs)
void start_timer_server (int priority, int sem_id)
void kill_timer_server (void)
void print_etime (void)

Variables

int etime_disabled
double etime_disable_time
int esleep_use_yield


Function Documentation

double clk_tck void   
 

Definition at line 114 of file _timer.c.

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 }

double RCS_EXPORT etime void   
 

void RCS_EXPORT esleep double    secs
 

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);   /* 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 }

void start_timer_server int    priority,
int    sem_id
 

void kill_timer_server void   
 

void print_etime void   
 


Variable Documentation

int etime_disabled
 

Definition at line 36 of file _timer.h.

double etime_disable_time
 

Definition at line 37 of file _timer.h.

int esleep_use_yield
 

Definition at line 38 of file _timer.h.


Generated on Sun Dec 2 15:56:56 2001 for rcslib by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001