44#ifndef _POSIX_C_SOURCE
45#define _POSIX_C_SOURCE 199309L
111#ifdef PICO_TIME_IMPLEMENTATION
117#if defined(_WIN32) || defined(_WIN64) || defined (__CYGWIN__)
118 #define PT_PLATFORM PT_WINDOWS
119#elif defined(__APPLE__) && defined(__MACH__)
120 #define PT_PLATFORM PT_APPLE
121#elif defined(__unix__)
122 #define PT_PLATFORM PT_UNIX
124 #error "Unsupported platform"
131#if PT_PLATFORM == PT_WINDOWS
137 static LARGE_INTEGER freq = { 0 };
139 if (freq.QuadPart == 0)
140 QueryPerformanceFrequency(&freq);
143 QueryPerformanceCounter(&ticks);
145 return (1000000UL * ticks.QuadPart) / freq.QuadPart;
151 timeGetDevCaps(&tc,
sizeof(TIMECAPS));
153 timeBeginPeriod(tc.wPeriodMin);
155 timeEndPeriod(tc.wPeriodMin);
162#elif PT_PLATFORM == PT_APPLE
164#include <mach/mach_time.h>
168 static mach_timebase_info_data_t freq = { 0, 0 };
171 mach_timebase_info(&freq);
173 uint64_t nsec = (mach_absolute_time() * freq.numer) / freq.denom;
181#elif PT_PLATFORM == PT_UNIX
189 clock_gettime(CLOCK_MONOTONIC, &ti);
190 return ti.tv_sec * 1000000UL + ti.tv_nsec / 1000;
199#if PT_PLATFORM == PT_UNIX || PT_PLATFORM == PT_APPLE
207 ti.tv_sec = duration / 1000000;
208 ti.tv_nsec = (duration % 1000000) * 1000;
210 while ((nanosleep(&ti, &ti) == -1) && (errno == EINTR));
227 return time / 1000000.0;
242 return (
ptime_t)(sec * 1000000.0 + 0.5);
ptime_t pt_now(void)
Returns the present high-res clock time.
int32_t pt_to_msec(ptime_t time)
Converts time to milliseconds.
int64_t pt_to_usec(ptime_t time)
Converts time to microseconds.
ptime_t pt_from_usec(int64_t usec)
Make time from microseconds.
double pt_to_sec(ptime_t time)
Converts time to seconds.
uint64_t ptime_t
Time value expressed in microseconds.
Definition pico_time.h:60
ptime_t pt_from_msec(int32_t msec)
Make time from miliseconds.
ptime_t pt_from_sec(double sec)
Make time from seconds.
void pt_sleep(ptime_t duration)
Sleeps for at least the specified duration.