Nilorea Library
C utilities for networking, threading, graphics
Loading...
Searching...
No Matches
n_time.c
Go to the documentation of this file.
1
8#include "nilorea/n_time.h"
9
10#include <stdio.h>
11#include <stdlib.h>
12#include <unistd.h>
13
14#if defined(__windows__)
19void u_sleep(__int64 usec) {
20 HANDLE timer;
21 LARGE_INTEGER ft;
22
23 ft.QuadPart = -(10 * usec); // Convert to 100 nanosecond interval, negative value indicates relative time
24
25 timer = CreateWaitableTimer(NULL, TRUE, NULL);
26 SetWaitableTimer(timer, &ft, 0, NULL, NULL, 0);
27 WaitForSingleObject(timer, INFINITE);
28 CloseHandle(timer);
29}
30#else
35void u_sleep(unsigned int usec) {
36 usleep(usec);
37}
38#endif
39
43void PAUSE(void) {
44 char k[2] = "";
45
46 printf("Press a enter to continue...");
47
48 fflush(stdin);
49 int n = scanf("%c", k);
50 int error = errno;
51 if (n == EOF) {
52 n_log(LOG_DEBUG, "Enter key was pressed !");
53 } else if (error != 0) {
54 n_log(LOG_ERR, "error %s when waiting for a key !", strerror(error));
55 } else {
56 n_log(LOG_DEBUG, "No matching characters");
57 }
58
59 printf("\n");
60} /* PAUSE(...) */
61
67int start_HiTimer(N_TIME* timer) {
68 /* set delta to 0 */
69 timer->delta = 0;
70
71#if defined(__windows__)
72 if (QueryPerformanceFrequency((LARGE_INTEGER*)&timer->freq) == 0)
73 return FALSE;
74 if (QueryPerformanceCounter(&timer->startTime) == 0)
75 return FALSE;
76#else
77 if (gettimeofday(&timer->startTime, 0) != 0)
78 return FALSE;
79#endif
80
81 return TRUE;
82} /* init_HiTimer(...) */
83
89time_t get_usec(N_TIME* timer) {
90#ifdef __windows__
91 QueryPerformanceCounter((LARGE_INTEGER*)&timer->currentTime);
92 timer->delta = 1000000 * (timer->currentTime.QuadPart - timer->startTime.QuadPart) / timer->freq.QuadPart;
93 timer->startTime = timer->currentTime;
94#else
95 gettimeofday(&timer->currentTime, 0);
96 timer->delta = (timer->currentTime.tv_sec - timer->startTime.tv_sec) * 1000000 + (timer->currentTime.tv_usec - timer->startTime.tv_usec);
97 timer->startTime.tv_sec = timer->currentTime.tv_sec;
98 timer->startTime.tv_usec = timer->currentTime.tv_usec;
99#endif
100
101 return timer->delta;
102} /* get_usec( ... ) */
103
109time_t get_msec(N_TIME* timer) {
110#ifdef __windows__
111 QueryPerformanceCounter((LARGE_INTEGER*)&timer->currentTime);
112 timer->delta = 1000 * (timer->currentTime.QuadPart - timer->startTime.QuadPart) / timer->freq.QuadPart;
113 timer->startTime = timer->currentTime;
114#else
115 gettimeofday(&timer->currentTime, 0);
116 timer->delta = (timer->currentTime.tv_sec - timer->startTime.tv_sec) * 1000 + (timer->currentTime.tv_usec - timer->startTime.tv_usec) / 1000;
117 timer->startTime.tv_sec = timer->currentTime.tv_sec;
118 timer->startTime.tv_usec = timer->currentTime.tv_usec;
119#endif
120
121 return timer->delta;
122} /* get_msec(...) */
123
129time_t get_sec(N_TIME* timer) {
130#ifdef __windows__
131 QueryPerformanceCounter((LARGE_INTEGER*)&timer->currentTime);
132 timer->delta = (timer->currentTime.QuadPart - timer->startTime.QuadPart) / timer->freq.QuadPart;
133 timer->startTime = timer->currentTime;
134#else
135 gettimeofday(&timer->currentTime, 0);
136 timer->delta = (timer->currentTime.tv_sec - timer->startTime.tv_sec) + (timer->currentTime.tv_usec - timer->startTime.tv_usec) / 1000000;
137 timer->startTime.tv_sec = timer->currentTime.tv_sec;
138 timer->startTime.tv_usec = timer->currentTime.tv_usec;
139#endif
140 return timer->delta;
141} /* get_sec(...) */
#define n_log(__LEVEL__,...)
Logging function wrapper to get line and func.
Definition n_log.h:69
#define LOG_DEBUG
debug-level messages
Definition n_log.h:64
#define LOG_ERR
error conditions
Definition n_log.h:56
struct timeval startTime
start time
Definition n_time.h:44
time_t delta
time since last poll
Definition n_time.h:34
struct timeval currentTime
start time
Definition n_time.h:46
void u_sleep(unsigned int usec)
wrapper around usleep for API consistency
Definition n_time.c:35
int start_HiTimer(N_TIME *timer)
Initialize or restart from zero any N_TIME HiTimer.
Definition n_time.c:67
time_t get_usec(N_TIME *timer)
Poll any N_TIME HiTimer, returning usec, and moving currentTime to startTime.
Definition n_time.c:89
time_t get_msec(N_TIME *timer)
Poll any N_TIME HiTimer, returning msec, and moving currentTime to startTime.
Definition n_time.c:109
time_t get_sec(N_TIME *timer)
Poll any N_TIME HiTimer, returning sec, and moving currentTime to startTime.
Definition n_time.c:129
void PAUSE(void)
make a pause in a terminal
Definition n_time.c:43
Timing Structure.
Definition n_time.h:32
Timing utilities.