Nilorea Library
C utilities for networking, threading, graphics
n_time.c
Go to the documentation of this file.
1
8#include "nilorea/n_time.h"
9
10
11#include <stdio.h>
12#include <stdlib.h>
13#include <unistd.h>
14
15
16#if defined(__windows__)
21void u_sleep( __int64 usec)
22{
23 HANDLE timer;
24 LARGE_INTEGER ft;
25
26 ft.QuadPart = -(10*usec); // Convert to 100 nanosecond interval, negative value indicates relative time
27
28 timer = CreateWaitableTimer(NULL, TRUE, NULL);
29 SetWaitableTimer(timer, &ft, 0, NULL, NULL, 0);
30 WaitForSingleObject(timer, INFINITE);
31 CloseHandle(timer);
32}
33#else
38void u_sleep( unsigned int usec )
39{
40 usleep( usec );
41}
42#endif
43
44
45
49void PAUSE( void )
50{
51
52 char k[ 2 ] = "" ;
53
54 printf( "Press a enter to continue..." );
55
56 fflush( stdin );
57 int n = scanf( "%c", k );
58 int error = errno ;
59 if( n == EOF )
60 {
61 n_log( LOG_DEBUG , "Enter key was pressed !");
62 }
63 else if( error != 0 )
64 {
65 n_log( LOG_ERR , "error %s when waiting for a key !" , strerror( error ) );
66 }
67 else
68 {
69 n_log( LOG_DEBUG , "No matching characters" );
70 }
71
72 printf( "\n" );
73} /* PAUSE(...) */
74
75
76
82int start_HiTimer( N_TIME *timer )
83{
84 /* set delta to 0 */
85 timer -> delta = 0;
86
87#if defined( __windows__ )
88 if( QueryPerformanceFrequency( ( LARGE_INTEGER * ) & timer -> freq ) == 0 )
89 return FALSE ;
90 if( QueryPerformanceCounter( &timer -> startTime ) == 0 )
91 return FALSE ;
92#else
93 if( gettimeofday( &timer -> startTime, 0 ) != 0 )
94 return FALSE ;
95#endif
96
97 return TRUE ;
98} /* init_HiTimer(...) */
99
100
101
107time_t get_usec( N_TIME *timer )
108{
109#ifdef __windows__
110 QueryPerformanceCounter( ( LARGE_INTEGER * ) & timer -> currentTime );
111 timer -> delta = 1000000 * ( timer -> currentTime . QuadPart - timer -> startTime . QuadPart ) / timer -> freq . QuadPart ;
112 timer -> startTime = timer -> currentTime ;
113#else
114 gettimeofday( &timer -> currentTime, 0 );
115 timer -> delta = ( timer -> currentTime . tv_sec - timer -> startTime . tv_sec ) * 1000000 + ( timer -> currentTime . tv_usec - timer -> startTime . tv_usec );
116 timer -> startTime . tv_sec = timer -> currentTime . tv_sec ;
117 timer -> startTime . tv_usec = timer -> currentTime . tv_usec ;
118#endif
119
120 return timer -> delta;
121} /* get_usec( ... ) */
122
123
124
130time_t get_msec( N_TIME *timer )
131{
132#ifdef __windows__
133 QueryPerformanceCounter( ( LARGE_INTEGER * ) & timer -> currentTime );
134 timer -> delta = 1000 * ( timer -> currentTime . QuadPart - timer -> startTime . QuadPart ) / timer -> freq . QuadPart ;
135 timer -> startTime = timer -> currentTime ;
136#else
137 gettimeofday( &timer -> currentTime, 0 );
138 timer -> delta = ( timer -> currentTime . tv_sec - timer -> startTime . tv_sec ) * 1000 + ( timer -> currentTime . tv_usec - timer -> startTime . tv_usec ) / 1000 ;
139 timer -> startTime . tv_sec = timer -> currentTime . tv_sec ;
140 timer -> startTime . tv_usec = timer -> currentTime . tv_usec ;
141#endif
142
143 return timer -> delta;
144} /* get_msec(...) */
145
146
147
153time_t get_sec( N_TIME *timer )
154{
155#ifdef __windows__
156 QueryPerformanceCounter( ( LARGE_INTEGER * ) & timer -> currentTime );
157 timer -> delta = ( timer -> currentTime . QuadPart - timer -> startTime . QuadPart ) / timer -> freq . QuadPart ;
158 timer -> startTime = timer -> currentTime ;
159#else
160 gettimeofday( &timer -> currentTime, 0 );
161 timer -> delta = ( timer -> currentTime . tv_sec - timer -> startTime . tv_sec ) + ( timer -> currentTime . tv_usec - timer -> startTime . tv_usec ) / 1000000 ;
162 timer -> startTime . tv_sec = timer -> currentTime . tv_sec ;
163 timer -> startTime . tv_usec = timer -> currentTime . tv_usec ;
164#endif
165 return timer -> delta;
166}/* get_sec(...) */
167
#define n_log(__LEVEL__,...)
Logging function wrapper to get line and func.
Definition: n_log.h:74
#define LOG_DEBUG
debug-level messages
Definition: n_log.h:66
#define LOG_ERR
error conditions
Definition: n_log.h:58
void u_sleep(unsigned int usec)
wrapper around usleep for API consistency
Definition: n_time.c:38
int start_HiTimer(N_TIME *timer)
Initialize or restart from zero any N_TIME HiTimer.
Definition: n_time.c:82
time_t get_usec(N_TIME *timer)
Poll any N_TIME HiTimer, returning usec, and moving currentTime to startTime.
Definition: n_time.c:107
time_t get_msec(N_TIME *timer)
Poll any N_TIME HiTimer, returning msec, and moving currentTime to startTime.
Definition: n_time.c:130
time_t get_sec(N_TIME *timer)
Poll any N_TIME HiTimer, returning sec, and moving currentTime to startTime.
Definition: n_time.c:153
void PAUSE(void)
make a pause in a terminal
Definition: n_time.c:49
Timing Structure.
Definition: n_time.h:34
Timing utilities.