当前位置: 首页 > 面试题库 >

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

韩弘方
2023-03-14
问题内容

我正在将一个最初为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()功能。



 类似资料:
  • 问题内容: PHP手册指出返回  “ 当前UNIX时间戳”  ᴀ  和返回 “当前Unix时间戳和微秒”  ʙ。 但是,是否 保证 这些功能的行为类似于严格符合POSIX.1的系统的行为? 具体来说,是否插入leap秒,使  |  的输出 在第二天的开始(也就是the秒的结尾) 向后* 跳1秒(在第二天的第一秒的整个过程中)

  • 我想做的是将一个 64 位无符号整数存储为 类型,保留其间隔二进制表示形式。 例如,我想保存 2^63-1=9223372036854775807(9223372036854775807)(2^63-1 和 2^63 = 9223372036854775808 = 10000000 000000000000000000000000000000000 000000000000(2) as-92233

  • 问题内容: 在下面的程序中,如果执行了此程序(例如,通过命令行),则是否可以单独确保args JVM不为null? 问题答案: 简短的回答:是的,它的长度可能为0,但不会为null。

  • 问题内容: 挂钟时间通常由系统RTC提供。这主要仅提供时间到毫秒范围,并且通常具有10到20毫秒的粒度。但是,通常报告说gettimeofday()的分辨率/粒度在几微秒的范围内。我假设微秒粒度必须来自其他来源。 如何实现gettimeofday()的微秒分辨率/粒度? 当从RTC提取到毫秒以下的部分并且从不同的硬件获取微秒时,会出现两个源的相位调整问题。这两个来源必须是某种方式。 这两个源之间的

  • 问题内容: 我正在使用以下内容打印时间戳: 但是我想将微秒四舍五入到小数点后两位,而不是打印出小数点后六位。有没有比所有时间元素“拆包”,将微秒格式化并将其四舍五入到小数点后两位以及格式化新的“打印字符串”更简单的方法了? 问题答案: