added gettime and sleep functions

This commit is contained in:
Timerix 2025-07-22 15:12:37 +05:00
parent f5805888bc
commit d3a8c03fe5
2 changed files with 76 additions and 0 deletions

30
include/tlibc/time.h Normal file
View File

@ -0,0 +1,30 @@
#pragma once
#if __cplusplus
extern "C" {
#endif
#include "std.h"
/// nanoseconds
typedef u64 nsec_t;
/// microseconds
typedef u64 usec_t;
/// miliseconds
typedef u64 msec_t;
/// system time now in nanoseconds
///@return u64 will overflow in 13 years
nsec_t getTimeNsec();
/// system time now in microseconds
///@return u64 will overflow in 58494 years
usec_t getTimeUsec();
void sleepNsec(nsec_t time);
void sleepUsec(usec_t time);
void sleepMsec(msec_t time);
#if __cplusplus
}
#endif

46
src/time.c Normal file
View File

@ -0,0 +1,46 @@
// posix version definition to use clock_gettime
#ifndef _XOPEN_SOURCE
#if __STDC_VERSION__ >= 199901L
#define _XOPEN_SOURCE 600
#else
#define _XOPEN_SOURCE 500
#endif
#endif
#include "tlibc/time.h"
#include <time.h>
#include <assert.h>
#define K 1000
#define M 1000000
#define G 1000000000
nsec_t getTimeNsec(){
struct timespec t;
assert(clock_gettime(CLOCK_REALTIME, &t) != 0);
u64 n = t.tv_sec * G + t.tv_nsec;
return n;
}
usec_t getTimeUsec(){
struct timespec t;
assert(clock_gettime(CLOCK_REALTIME, &t) != 0);
u64 n = t.tv_sec * M + t.tv_nsec / K;
return n;
}
void sleepNsec(nsec_t time){
struct timespec t = {
.tv_sec = time / G,
.tv_nsec = time % G
};
assert(nanosleep(&t, NULL) != 0);
}
void sleepUsec(usec_t time){
sleepNsec(time * K);
}
void sleepMsec(msec_t time){
sleepNsec(time * M);
}