VirtualBox

source: vbox/trunk/include/iprt/time.h@ 4011

Last change on this file since 4011 was 3913, checked in by vboxsync, 17 years ago

Solaris.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 20.3 KB
Line 
1/** @file
2 * innotek Portable Runtime - Time.
3 */
4
5/*
6 * Copyright (C) 2006-2007 innotek GmbH
7 *
8 * This file is part of VirtualBox Open Source Edition (OSE), as
9 * available from http://www.virtualbox.org. This file is free software;
10 * you can redistribute it and/or modify it under the terms of the GNU
11 * General Public License as published by the Free Software Foundation,
12 * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
13 * distribution. VirtualBox OSE is distributed in the hope that it will
14 * be useful, but WITHOUT ANY WARRANTY of any kind.
15 *
16 * If you received this file as part of a commercial VirtualBox
17 * distribution, then only the terms of your commercial VirtualBox
18 * license agreement apply instead of the previous paragraph.
19 */
20
21#ifndef ___iprt_time_h
22#define ___iprt_time_h
23
24#include <iprt/cdefs.h>
25#include <iprt/types.h>
26
27__BEGIN_DECLS
28
29/** @defgroup grp_rt_time RTTime - Time
30 * @ingroup grp_rt
31 * @{
32 */
33
34/** Time Specification.
35 *
36 * Use the inline RTTimeSpecGet/Set to operate on structure this so we
37 * can easily change the representation if required later.
38 *
39 * The current representation is in nanoseconds relative to the unix epoch
40 * (1970-01-01 00:00:00 UTC). This gives us an approximate span from
41 * 1678 to 2262 without sacrifying the resolution offered by the various
42 * host OSes (BSD & LINUX 1ns, NT 100ns).
43 */
44typedef struct RTTIMESPEC
45{
46 /** Nanoseconds since epoch.
47 * The name is intentially too long to be comfortable to use because you should be
48 * using inline helpers! */
49 int64_t i64NanosecondsRelativeToUnixEpoch;
50} RTTIMESPEC;
51/** Pointer to a time spec structure. */
52typedef RTTIMESPEC *PRTTIMESPEC;
53/** Pointer to a const time spec structure. */
54typedef const RTTIMESPEC *PCRTTIMESPEC;
55
56
57/** @name RTTIMESPEC methods
58 * @{ */
59
60/**
61 * Gets the time as nanoseconds relative to the unix epoch.
62 *
63 * @returns Nanoseconds relative to unix epoch.
64 * @param pTime The time spec to interpret.
65 */
66DECLINLINE(int64_t) RTTimeSpecGetNano(PCRTTIMESPEC pTime)
67{
68 return pTime->i64NanosecondsRelativeToUnixEpoch;
69}
70
71
72/**
73 * Sets the time give by nanoseconds relative to the unix epoch.
74 *
75 * @returns pTime.
76 * @param pTime The time spec to modify.
77 * @param i64Nano The new time in nanoseconds.
78 */
79DECLINLINE(PRTTIMESPEC) RTTimeSpecSetNano(PRTTIMESPEC pTime, int64_t i64Nano)
80{
81 pTime->i64NanosecondsRelativeToUnixEpoch = i64Nano;
82 return pTime;
83}
84
85
86/**
87 * Gets the time as microseconds relative to the unix epoch.
88 *
89 * @returns microseconds relative to unix epoch.
90 * @param pTime The time spec to interpret.
91 */
92DECLINLINE(int64_t) RTTimeSpecGetMicro(PCRTTIMESPEC pTime)
93{
94 return pTime->i64NanosecondsRelativeToUnixEpoch / 1000;
95}
96
97
98/**
99 * Sets the time given by microseconds relative to the unix epoch.
100 *
101 * @returns pTime.
102 * @param pTime The time spec to modify.
103 * @param i64Micro The new time in microsecond.
104 */
105DECLINLINE(PRTTIMESPEC) RTTimeSpecSetMicro(PRTTIMESPEC pTime, int64_t i64Micro)
106{
107 pTime->i64NanosecondsRelativeToUnixEpoch = i64Micro * 1000;
108 return pTime;
109}
110
111
112/**
113 * Gets the time as milliseconds relative to the unix epoch.
114 *
115 * @returns milliseconds relative to unix epoch.
116 * @param pTime The time spec to interpret.
117 */
118DECLINLINE(int64_t) RTTimeSpecGetMilli(PCRTTIMESPEC pTime)
119{
120 return pTime->i64NanosecondsRelativeToUnixEpoch / 1000000;
121}
122
123
124/**
125 * Sets the time given by milliseconds relative to the unix epoch.
126 *
127 * @returns pTime.
128 * @param pTime The time spec to modify.
129 * @param i64Milli The new time in milliseconds.
130 */
131DECLINLINE(PRTTIMESPEC) RTTimeSpecSetMilli(PRTTIMESPEC pTime, int64_t i64Milli)
132{
133 pTime->i64NanosecondsRelativeToUnixEpoch = i64Milli * 1000000;
134 return pTime;
135}
136
137
138/**
139 * Gets the time as seconds relative to the unix epoch.
140 *
141 * @returns seconds relative to unix epoch.
142 * @param pTime The time spec to interpret.
143 */
144DECLINLINE(int64_t) RTTimeSpecGetSeconds(PCRTTIMESPEC pTime)
145{
146 return pTime->i64NanosecondsRelativeToUnixEpoch / 1000000000;
147}
148
149
150/**
151 * Sets the time given by seconds relative to the unix epoch.
152 *
153 * @returns pTime.
154 * @param pTime The time spec to modify.
155 * @param i64Seconds The new time in seconds.
156 */
157DECLINLINE(PRTTIMESPEC) RTTimeSpecSetSeconds(PRTTIMESPEC pTime, int64_t i64Seconds)
158{
159 pTime->i64NanosecondsRelativeToUnixEpoch = i64Seconds * 1000000000;
160 return pTime;
161}
162
163
164/**
165 * Makes the time spec absolute like abs() does (i.e. a positive value).
166 *
167 * @returns pTime.
168 * @param pTime The time spec to modify.
169 */
170DECLINLINE(PRTTIMESPEC) RTTimeSpecAbsolute(PRTTIMESPEC pTime)
171{
172 if (pTime->i64NanosecondsRelativeToUnixEpoch < 0)
173 pTime->i64NanosecondsRelativeToUnixEpoch = -pTime->i64NanosecondsRelativeToUnixEpoch;
174 return pTime;
175}
176
177
178/**
179 * Negates the time.
180 *
181 * @returns pTime.
182 * @param pTime The time spec to modify.
183 */
184DECLINLINE(PRTTIMESPEC) RTTimeSpecNegate(PRTTIMESPEC pTime)
185{
186 pTime->i64NanosecondsRelativeToUnixEpoch = -pTime->i64NanosecondsRelativeToUnixEpoch;
187 return pTime;
188}
189
190
191/**
192 * Adds a time period to the time.
193 *
194 * @returns pTime.
195 * @param pTime The time spec to modify.
196 * @param pTimeAdd The time spec to add to pTime.
197 */
198DECLINLINE(PRTTIMESPEC) RTTimeSpecAdd(PRTTIMESPEC pTime, PCRTTIMESPEC pTimeAdd)
199{
200 pTime->i64NanosecondsRelativeToUnixEpoch += pTimeAdd->i64NanosecondsRelativeToUnixEpoch;
201 return pTime;
202}
203
204
205/**
206 * Adds a time period give as nanoseconds from the time.
207 *
208 * @returns pTime.
209 * @param pTime The time spec to modify.
210 * @param i64Nano The time period in nanoseconds.
211 */
212DECLINLINE(PRTTIMESPEC) RTTimeSpecAddNano(PRTTIMESPEC pTime, int64_t i64Nano)
213{
214 pTime->i64NanosecondsRelativeToUnixEpoch += i64Nano;
215 return pTime;
216}
217
218
219/**
220 * Adds a time period give as microseconds from the time.
221 *
222 * @returns pTime.
223 * @param pTime The time spec to modify.
224 * @param i64Micro The time period in microseconds.
225 */
226DECLINLINE(PRTTIMESPEC) RTTimeSpecAddMicro(PRTTIMESPEC pTime, int64_t i64Micro)
227{
228 pTime->i64NanosecondsRelativeToUnixEpoch += i64Micro * 1000;
229 return pTime;
230}
231
232
233/**
234 * Adds a time period give as milliseconds from the time.
235 *
236 * @returns pTime.
237 * @param pTime The time spec to modify.
238 * @param i64Milli The time period in milliseconds.
239 */
240DECLINLINE(PRTTIMESPEC) RTTimeSpecAddMilli(PRTTIMESPEC pTime, int64_t i64Milli)
241{
242 pTime->i64NanosecondsRelativeToUnixEpoch += i64Milli * 1000000;
243 return pTime;
244}
245
246
247/**
248 * Adds a time period give as seconds from the time.
249 *
250 * @returns pTime.
251 * @param pTime The time spec to modify.
252 * @param i64Seconds The time period in seconds.
253 */
254DECLINLINE(PRTTIMESPEC) RTTimeSpecAddSeconds(PRTTIMESPEC pTime, int64_t i64Seconds)
255{
256 pTime->i64NanosecondsRelativeToUnixEpoch += i64Seconds * 1000000000;
257 return pTime;
258}
259
260
261/**
262 * Subtracts a time period from the time.
263 *
264 * @returns pTime.
265 * @param pTime The time spec to modify.
266 * @param pTimeSub The time spec to subtract from pTime.
267 */
268DECLINLINE(PRTTIMESPEC) RTTimeSpecSub(PRTTIMESPEC pTime, PCRTTIMESPEC pTimeSub)
269{
270 pTime->i64NanosecondsRelativeToUnixEpoch -= pTimeSub->i64NanosecondsRelativeToUnixEpoch;
271 return pTime;
272}
273
274
275/**
276 * Subtracts a time period give as nanoseconds from the time.
277 *
278 * @returns pTime.
279 * @param pTime The time spec to modify.
280 * @param i64Nano The time period in nanoseconds.
281 */
282DECLINLINE(PRTTIMESPEC) RTTimeSpecSubNano(PRTTIMESPEC pTime, int64_t i64Nano)
283{
284 pTime->i64NanosecondsRelativeToUnixEpoch -= i64Nano;
285 return pTime;
286}
287
288
289/**
290 * Subtracts a time period give as microseconds from the time.
291 *
292 * @returns pTime.
293 * @param pTime The time spec to modify.
294 * @param i64Micro The time period in microseconds.
295 */
296DECLINLINE(PRTTIMESPEC) RTTimeSpecSubMicro(PRTTIMESPEC pTime, int64_t i64Micro)
297{
298 pTime->i64NanosecondsRelativeToUnixEpoch -= i64Micro * 1000;
299 return pTime;
300}
301
302
303/**
304 * Subtracts a time period give as milliseconds from the time.
305 *
306 * @returns pTime.
307 * @param pTime The time spec to modify.
308 * @param i64Milli The time period in milliseconds.
309 */
310DECLINLINE(PRTTIMESPEC) RTTimeSpecSubMilli(PRTTIMESPEC pTime, int64_t i64Milli)
311{
312 pTime->i64NanosecondsRelativeToUnixEpoch -= i64Milli * 1000000;
313 return pTime;
314}
315
316
317/**
318 * Subtracts a time period give as seconds from the time.
319 *
320 * @returns pTime.
321 * @param pTime The time spec to modify.
322 * @param i64Seconds The time period in seconds.
323 */
324DECLINLINE(PRTTIMESPEC) RTTimeSpecSubSeconds(PRTTIMESPEC pTime, int64_t i64Seconds)
325{
326 pTime->i64NanosecondsRelativeToUnixEpoch -= i64Seconds * 100000000;
327 return pTime;
328}
329
330
331/* PORTME: Add struct timeval guard macro here. */
332#if defined(RTTIME_INCL_TIMEVAL) || defined(_STRUCT_TIMEVAL) || defined(TIMEVAL_TO_TIMESPEC) || defined(_SYS_TIME_H)
333/**
334 * Gets the time as POSIX timeval.
335 *
336 * @returns pTime.
337 * @param pTime The time spec to interpret.
338 * @param pTimeval Where to store the time as POSIX timeval.
339 */
340DECLINLINE(struct timeval *) RTTimeSpecGetTimeval(PCRTTIMESPEC pTime, struct timeval *pTimeval)
341{
342 int64_t i64 = RTTimeSpecGetMicro(pTime);
343 int32_t i32Micro = (int32_t)(i64 % 1000000);
344 i64 /= 1000000;
345 if (i32Micro < 0)
346 {
347 i32Micro += 1000000;
348 i64++;
349 }
350 pTimeval->tv_sec = (time_t)i64;
351 pTimeval->tv_usec = i32Micro;
352 return pTimeval;
353}
354
355/**
356 * Sets the time as POSIX timeval.
357 *
358 * @returns pTime.
359 * @param pTime The time spec to modify.
360 * @param pTimeval Pointer to the POSIX timeval struct with the new time.
361 */
362DECLINLINE(PRTTIMESPEC) RTTimeSpecSetTimeval(PRTTIMESPEC pTime, const struct timeval *pTimeval)
363{
364 return RTTimeSpecAddMicro(RTTimeSpecSetSeconds(pTime, pTimeval->tv_sec), pTimeval->tv_usec);
365}
366#endif /* various ways of detecting struct timeval */
367
368
369/* PORTME: Add struct timespec guard macro here. */
370#if defined(RTTIME_INCL_TIMESPEC) || defined(_STRUCT_TIMESPEC) || defined(TIMEVAL_TO_TIMESPEC)
371/**
372 * Gets the time as POSIX timespec.
373 *
374 * @returns pTime.
375 * @param pTime The time spec to interpret.
376 * @param pTimespec Where to store the time as POSIX timespec.
377 */
378DECLINLINE(struct timespec *) RTTimeSpecGetTimespec(PCRTTIMESPEC pTime, struct timespec *pTimespec)
379{
380 int64_t i64 = RTTimeSpecGetNano(pTime);
381 int32_t i32Nano = (int32_t)(i64 % 1000000000);
382 i64 /= 1000000000;
383 if (i32Nano < 0)
384 {
385 i32Nano += 1000000000;
386 i64++;
387 }
388 pTimespec->tv_sec = (time_t)i64;
389 pTimespec->tv_nsec = i32Nano;
390 return pTimespec;
391}
392
393/**
394 * Sets the time as POSIX timespec.
395 *
396 * @returns pTime.
397 * @param pTime The time spec to modify.
398 * @param pTimespec Pointer to the POSIX timespec struct with the new time.
399 */
400DECLINLINE(PRTTIMESPEC) RTTimeSpecSetTimespec(PRTTIMESPEC pTime, const struct timespec *pTimespec)
401{
402 return RTTimeSpecAddNano(RTTimeSpecSetSeconds(pTime, pTimespec->tv_sec), pTimespec->tv_nsec);
403}
404#endif /* various ways of detecting struct timespec */
405
406
407
408/** The offset of the unix epoch and the base for NT time (in 100ns units).
409 * Nt time starts at 1601-01-01 00:00:00. */
410#define RTTIME_NT_TIME_OFFSET_UNIX (116444736000000000LL)
411
412
413/**
414 * Gets the time as NT time.
415 *
416 * @returns Nt time.
417 * @param pTime The time spec to interpret.
418 */
419DECLINLINE(uint64_t) RTTimeSpecGetNtTime(PCRTTIMESPEC pTime)
420{
421 return pTime->i64NanosecondsRelativeToUnixEpoch / 100
422 + RTTIME_NT_TIME_OFFSET_UNIX;
423}
424
425
426/**
427 * Sets the time given by Nt time.
428 *
429 * @returns pTime.
430 * @param pTime The time spec to modify.
431 * @param u64NtTime The new time in Nt time.
432 */
433DECLINLINE(PRTTIMESPEC) RTTimeSpecSetNtTime(PRTTIMESPEC pTime, uint64_t u64NtTime)
434{
435 pTime->i64NanosecondsRelativeToUnixEpoch =
436 ((int64_t)u64NtTime - RTTIME_NT_TIME_OFFSET_UNIX) * 100;
437 return pTime;
438}
439
440
441#ifdef _FILETIME_
442/**
443 * Gets the time as NT file time.
444 *
445 * @returns pFileTime.
446 * @param pTime The time spec to interpret.
447 * @param pFileTime Pointer to NT filetime structure.
448 */
449DECLINLINE(PFILETIME) RTTimeSpecGetNtFileTime(PCRTTIMESPEC pTime, PFILETIME pFileTime)
450{
451 *((uint64_t *)pFileTime) = RTTimeSpecGetNtTime(pTime);
452 return pFileTime;
453}
454
455/**
456 * Sets the time as NT file time.
457 *
458 * @returns pTime.
459 * @param pTime The time spec to modify.
460 * @param pFileTime Where to store the time as Nt file time.
461 */
462DECLINLINE(PRTTIMESPEC) RTTimeSpecSetNtFileTime(PRTTIMESPEC pTime, const FILETIME *pFileTime)
463{
464 return RTTimeSpecSetNtTime(pTime, *(const uint64_t *)pFileTime);
465}
466#endif
467
468
469/** The offset to the start of DOS time.
470 * DOS time starts 1980-01-01 00:00:00. */
471#define RTTIME_OFFSET_DOS_TIME (315532800000000000LL)
472
473
474/**
475 * Gets the time as seconds relative to the start of dos time.
476 *
477 * @returns seconds relative to the start of dos time.
478 * @param pTime The time spec to interpret.
479 */
480DECLINLINE(int64_t) RTTimeSpecGetDosSeconds(PCRTTIMESPEC pTime)
481{
482 return (pTime->i64NanosecondsRelativeToUnixEpoch + RTTIME_OFFSET_DOS_TIME)
483 / 1000000000;
484}
485
486
487/**
488 * Sets the time given by seconds relative to the start of dos time.
489 *
490 * @returns pTime.
491 * @param pTime The time spec to modify.
492 * @param i64Seconds The new time in seconds relative to the start of dos time.
493 */
494DECLINLINE(PRTTIMESPEC) RTTimeSpecSetDosSeconds(PRTTIMESPEC pTime, int64_t i64Seconds)
495{
496 pTime->i64NanosecondsRelativeToUnixEpoch = i64Seconds * 1000000000
497 - RTTIME_NT_TIME_OFFSET_UNIX;
498 return pTime;
499}
500
501
502/**
503 * Compare two time specs.
504 *
505 * @returns true they are equal.
506 * @returns false they are not equal.
507 * @param pTime1 The 1st time spec.
508 * @param pTime2 The 2nd time spec.
509 */
510DECLINLINE(bool) RTTimeSpecIsEqual(PCRTTIMESPEC pTime1, PCRTTIMESPEC pTime2)
511{
512 return pTime1->i64NanosecondsRelativeToUnixEpoch == pTime2->i64NanosecondsRelativeToUnixEpoch;
513}
514
515/**
516 * Converts a time spec to a ISO date string.
517 *
518 * @returns psz on success.
519 * @returns NULL on buffer underflow.
520 * @param pTime The time spec.
521 * @param psz Where to store the string.
522 * @param cb The size of the buffer.
523 */
524RTDECL(char *) RTTimeSpecToString(PCRTTIMESPEC pTime, char *psz, size_t cb);
525
526/** @} */
527
528
529/**
530 * Exploded time.
531 */
532#pragma pack(1)
533typedef struct RTTIME
534{
535 /** The year number. */
536 int32_t i32Year;
537 /** The month of the year (1-12). January is 1. */
538 uint8_t u8Month;
539 /** The day of the week (0-6). Monday is 0. */
540 uint8_t u8WeekDay;
541 /** The day of the year (1-366). January the 1st is 1. */
542 uint16_t u16YearDay;
543 /** The day of the month (1-31). */
544 uint8_t u8MonthDay;
545 /** Hour of the day (0-23). */
546 uint8_t u8Hour;
547 /** The minute of the hour (0-59). */
548 uint8_t u8Minute;
549 /** The second of the minute (0-60).
550 * (u32Nanosecond / 1000000) */
551 uint8_t u8Second;
552 /** The nanoseconds of the second (0-999999999). */
553 uint32_t u32Nanosecond;
554 /** Flags, of the RTTIME_FLAGS_* \#defines. */
555 uint32_t fFlags;
556/** @todo we need a UTC offset field. */
557} RTTIME;
558#pragma pack()
559/** Pointer to a exploded time structure. */
560typedef RTTIME *PRTTIME;
561/** Pointer to a const exploded time structure. */
562typedef const RTTIME *PCRTTIME;
563
564/** @name RTTIME::fFlags values.
565 * @{ */
566/** Set if the time is UTC. If clear the time local time. */
567#define RTTIME_FLAGS_TYPE_MASK 3
568/** the time is UTC time. */
569#define RTTIME_FLAGS_TYPE_UTC 2
570/** The time is local time. */
571#define RTTIME_FLAGS_TYPE_LOCAL 3
572
573/** Set if the time is local and daylight saving time is in effect.
574 * Not bit is not valid if RTTIME_FLAGS_NO_DST_DATA is set. */
575#define RTTIME_FLAGS_DST BIT(4)
576/** Set if the time is local and there is no data available on daylight saving time. */
577#define RTTIME_FLAGS_NO_DST_DATA BIT(5)
578/** Set if the year is a leap year.
579 * This is mutual exclusiv with RTTIME_FLAGS_COMMON_YEAR. */
580#define RTTIME_FLAGS_LEAP_YEAR BIT(6)
581/** Set if the year is a common year.
582 * This is mutual exclusiv with RTTIME_FLAGS_LEAP_YEAR. */
583#define RTTIME_FLAGS_COMMON_YEAR BIT(7)
584/** @} */
585
586
587/**
588 * Gets the current system time (UTC).
589 *
590 * @returns pTime.
591 * @param pTime Where to store the time.
592 */
593RTDECL(PRTTIMESPEC) RTTimeNow(PRTTIMESPEC pTime);
594
595/**
596 * Explodes a time spec (UTC).
597 *
598 * @returns pTime.
599 * @param pTime Where to store the exploded time.
600 * @param pTimeSpec The time spec to exploded.
601 */
602RTDECL(PRTTIME) RTTimeExplode(PRTTIME pTime, PCRTTIMESPEC pTimeSpec);
603
604/**
605 * Implodes exploded time to a time spec (UTC).
606 *
607 * @returns pTime on success.
608 * @returns NULL if the pTime data is invalid.
609 * @param pTimeSpec Where to store the imploded UTC time.
610 * If pTime specifies a time which outside the range, maximum or
611 * minimum values will be returned.
612 * @param pTime Pointer to the exploded time to implode.
613 * The fields u8Month, u8WeekDay and u8MonthDay are not used,
614 * and all the other fields are expected to be within their
615 * bounds. Use RTTimeNormalize() to calculate u16YearDay and
616 * normalize the ranges of the fields.
617 */
618RTDECL(PRTTIMESPEC) RTTimeImplode(PRTTIMESPEC pTimeSpec, PCRTTIME pTime);
619
620/**
621 * Normalizes the fields of a timestructure.
622 *
623 * It is possible to calculate month/day fields in some
624 * combinations. It's also possible to overflow other
625 * fields, and these overflows will be adjusted for.
626 *
627 * @returns pTime on success.
628 * @returns NULL if the data is invalid.
629 * @param pTime The time structure to normalize.
630 */
631RTDECL(PRTTIME) RTTimeNormalize(PRTTIME pTime);
632
633/**
634 * Gets the current local system time.
635 *
636 * @returns pTime.
637 * @param pTime Where to store the local time.
638 */
639RTDECL(PRTTIMESPEC) RTTimeLocalNow(PRTTIMESPEC pTime);
640
641/**
642 * Gets the delta between UTC and local time.
643 *
644 * @code
645 * RTTIMESPEC LocalTime;
646 * RTTimeSpecAddNano(RTTimeNow(&LocalTime), RTTimeLocalDeltaNano());
647 * @endcode
648 *
649 * @returns Returns the nanosecond delta between UTC and local time.
650 */
651RTDECL(int64_t) RTTimeLocalDeltaNano(void);
652
653/**
654 * Explodes a time spec to the localized timezone.
655 *
656 * @returns pTime.
657 * @param pTime Where to store the exploded time.
658 * @param pTimeSpec The time spec to exploded (UTC).
659 */
660RTDECL(PRTTIME) RTTimeLocalExplode(PRTTIME pTime, PCRTTIMESPEC pTimeSpec);
661
662/**
663 * Converts a time spec to a ISO date string.
664 *
665 * @returns psz on success.
666 * @returns NULL on buffer underflow.
667 * @param pTime The time. Caller should've normalized this.
668 * @param psz Where to store the string.
669 * @param cb The size of the buffer.
670 */
671RTDECL(char *) RTTimeToString(PCRTTIME pTime, char *psz, size_t cb);
672
673/**
674 * Gets the current nanosecond timestamp.
675 *
676 * @returns nanosecond timestamp.
677 */
678RTDECL(uint64_t) RTTimeNanoTS(void);
679
680/**
681 * Gets the current millisecond timestamp.
682 *
683 * @returns millisecond timestamp.
684 */
685RTDECL(uint64_t) RTTimeMilliTS(void);
686
687/**
688 * Debugging the time api.
689 *
690 * @returns the number of 1ns steps which has been applied by rtTimeNanoTSInternal().
691 */
692RTDECL(uint32_t) RTTime1nsSteps(void);
693
694/**
695 * Gets the current nanosecond timestamp.
696 *
697 * This differs from RTTimeNanoTS in that it will use system APIs and not do any
698 * resolution or performance optimizations.
699 *
700 * @returns nanosecond timestamp.
701 */
702RTDECL(uint64_t) RTTimeSystemNanoTS(void);
703
704/**
705 * Gets the current millisecond timestamp.
706 *
707 * This differs from RTTimeNanoTS in that it will use system APIs and not do any
708 * resolution or performance optimizations.
709 *
710 * @returns millisecond timestamp.
711 */
712RTDECL(uint64_t) RTTimeSystemMilliTS(void);
713
714/**
715 * Get the nanosecond timestamp relative to program startup.
716 *
717 * @returns Timestamp relative to program startup.
718 */
719RTDECL(uint64_t) RTTimeProgramNanoTS(void);
720
721/**
722 * Get the microsecond timestamp relative to program startup.
723 *
724 * @returns Timestamp relative to program startup.
725 */
726RTDECL(uint64_t) RTTimeProgramMicroTS(void);
727
728/**
729 * Get the millisecond timestamp relative to program startup.
730 *
731 * @returns Timestamp relative to program startup.
732 */
733RTDECL(uint64_t) RTTimeProgramMilliTS(void);
734
735/**
736 * Get the second timestamp relative to program startup.
737 *
738 * @returns Timestamp relative to program startup.
739 */
740RTDECL(uint32_t) RTTimeProgramSecTS(void);
741
742/**
743 * Get the RTTimeNanoTS() of when the program started.
744 *
745 * @returns Program startup timestamp.
746 */
747RTDECL(uint64_t) RTTimeProgramStartNanoTS(void);
748
749/** @} */
750
751__END_DECLS
752
753#endif
754
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette