gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:24:32 25 4
gpt4 key购买 nike

我正在将最初为 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 作为频率,在我的机器上运行良好,给我一个包含 的 64 位变量自程序启动以来的 uSeconds

所以这是可移植的吗?我不想发现如果内核以某种方式或类似的方式编译,它的工作方式会有所不同。不过,我觉得它不能移植到 Linux 以外的东西上。

最佳答案

也许吧。但是你有更大的问题。 gettimeofday() 如果您的系统上存在更改计时器的进程(即ntpd),可能会导致计时不正确。不过,在“普通”Linux 上,我相信 gettimeofday() 的分辨率是 10us。因此,它可以根据系统上运行的进程向前和向后跳跃和时间。这有效地回答了您的问题。

您应该查看 clock_gettime(CLOCK_MONOTONIC) 的时间间隔。由于多核系统和外部时钟设置等原因,它遇到的问题较少。

另外,查看 clock_getres() 函数。

关于linux - gettimeofday() 是否保证为微秒级分辨率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/88/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com