gettimeofday()是否保证为微秒分辨率?

我正在将一个最初为Win32 API编写的游戏移植到Linux(很好,是将Win32端口的OS X端口移植到Linux)。

QueryPerformanceCounter自程序启动以来,我已经通过提供uSeconds来实现:

BOOL QueryPerformanceCounter(LARGE_INTEGER* performanceCount)

{

gettimeofday(&currentTimeVal, NULL);

performanceCount->QuadPart = (currentTimeVal.tv_sec - startTimeVal.tv_sec);

performanceCount->QuadPart *= (1000 * 1000);

performanceCount->QuadPart += (currentTimeVal.tv_usec - startTimeVal.tv_usec);

return true;

}

再加上QueryPerformanceFrequency()恒定的1000000作为频率,可以

很好地工作,并为我提供了一个uSeconds自程序启动以来包含的64位变量。

是便携式的吗? 我不想发现以某种方式或类似方式编译内核时,它的工作原理有所不同。我可以将其移植到Linux以外的其他软件上,这很好。

回答:

也许。但是你有更大的问题。gettimeofday()如果系统上有更改计时器的进程(即ntpd),则可能会导致计时不正确。但是,在“普通”

Linux上,我相信的分辨率gettimeofday()为10us。因此,它可以根据系统上运行的进程向前和向后跳转,并可以跳转。有效地回答了您的问题。

您应该查看clock_gettime(CLOCK_MONOTONIC)时间间隔。由于诸如多核系统和外部时钟设置之类的问题,它遇到的问题更少。

另外,查看该clock_getres()功能。

以上是 gettimeofday()是否保证为微秒分辨率? 的全部内容, 来源链接: utcz.com/qa/397522.html

回到顶部