如何在Win32中获取CPU周期数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (11)

在Win32中,有没有办法获得一个独特的cpu循环计数或类似的东西,对于多个进程/语言/系统/等是统一的。

我正在创建一些日志文件,但是必须生成多个日志文件,因为我们正在托管.NET运行时,并且我想避免从一个调用到另一个来进行日志记录。因此,我认为我只生成两个文件,将它们组合起来,然后对它们进行排序,以获得涉及跨世界调用的连贯时间线。

但是,每次通话都不会增加GetTickCount,因此不可靠。是否有更好的号码,以便在排序时以正确的顺序接听电话?

编辑:感谢@Greg把我带到QueryPerformanceCounter的轨道,这就是诀窍。

提问于
用户回答回答于

这是一篇有趣的文章!说不要使用RDTSC,而是使用QueryPerformanceCounter

结论:

timeGetTime()在许多基于Windows的操作系统上使用常规旧定时是不可靠的,因为系统定时器的粒度可能高达10-15毫秒,这意味着 timeGetTime()只能精确到10-15毫秒。[请注意,高粒度发生在基于NT的操作系统上,如Windows NT,2000和XP。Windows 95和98往往具有更好的粒度,大约1-5毫秒。] 但是,如果您timeBeginPeriod(1)在程序开始时(以及 timeEndPeriod(1)结束时)调用 ,timeGetTime()通常会精确到1-2毫秒,并将为您提供极其准确的计时信息。 Sleep()表现相似; Sleep()实际睡眠的时间长度与粒度相同timeGetTime(),因此在调用 timeBeginPeriod(1)一次之后, Sleep(1)实际上将睡眠1-2毫秒,Sleep(2)为2-3,依此类推(而不是以高于10-15毫秒)。 对于更高精度的时序(亚毫秒精度),您可能希望避免使用汇编助记符RDTSC,因为它很难校准 ; 相反,使用 QueryPerformanceFrequencyQueryPerformanceCounter,精确到小于10微秒(0.00001秒)。 对于简单的时序,timeGetTime和QueryPerformanceCounter都运行良好,而QueryPerformanceCounter显然更准确。但是,如果你需要进行任何类型的“定时暂停”(例如帧速率限制所需的那些),你需要小心坐在一个调用QueryPerformanceCounter的循环中,等待它达到某个值; 这会占用100%的处理器。相反,考虑一个混合方案,你需要传递超过1毫秒的时间,然后只进入QueryPerformanceCounter 100%-busy循环,你可以调用Sleep(1)(不要忘记timeBeginPeriod(1)!)完成你需要的最后<1/1000秒延迟。这将为您提供超精确的延迟(精确到10微秒),并且CPU使用率极低。

热门问答

关于web表情包集成?

最爱开车啦互联网的敏感者
推荐
表情使用方式有两种方式: 1)是使用 TIMFaceElem 中的 index,标识表情的索引,比如 Android 和 iOS 两端都有同一套表情图,索引2为笑脸,index=2 就表示笑脸,两端发送和接收都显示同一张索引表情图片即可。 2 ) 是使用 TIMFaceElem ...... 展开详请

如何将本地的.json格式的文件部署到服务器上, 通过url请求?

使用 CDS-Mask 做数据合作,怎么确保双方都不能反推对方的 ID?

用户2134289

腾讯科技 · 高级工程师 (已认证)

推荐
您好,两种方案可以解决您的需求 1)如果您这边ID不需要在业务上使用,将ID进行加星脱敏即可,加星后的所有数据字符将变为*,无法还原; 2)如果您这边ID在业务上需要使用,也就是ID在处理后必须保持唯一性,那么需要采用腾讯数港算法解决该问题,数港算法目前灰度中,如需要申请,烦请通...... 展开详请

cos.sliceUploadFile支持断点续传吗?

如果用的是 cos-js-sdk,那么 cos.restartTask 是会断点续传的,用法没有问题。 PS: sdk 使用可以参考 demo.js https://github.com/tencentyun/cos-js-sdk-v5/blob/master/demo/demo...... 展开详请

如何调整版本库大小?

marssun_1984

腾讯 · 高级产品经理 (已认证)

腾讯研发管理部产品经理
推荐

数据万象持久化在JavaScript SDK中的问题?

可以的,有Domain参数。请参考:https://github.com/tencentyun/cos-js-sdk-v5/blob/master/csp/csp.html#L56

所属标签

扫码关注云+社区

领取腾讯云代金券