gpt4 book ai didi

windows - 为什么 QueryPerformanceCounter/QueryPerformanceFrequency 会失败?

转载 作者:可可西里 更新时间:2023-11-01 10:21:42 26 4
gpt4 key购买 nike

MSDN 上有一篇文章谈到QueryPerformanceCounter:

Acquiring high-resolution time stamps

底部是常见问题解答部分,其中有一个有趣的问题:

Under what circumstances does QueryPerformanceFrequency return FALSE, or QueryPerformanceCounter return zero?

This won't occur on any system that runs Windows XP or later.

这个答案是正确的,除了它是错误的。在情况下,QueryPerformanceFrequency 将返回false

我会自己回答这个问题。

最佳答案

Under what circumstances does QueryPerformanceFrequency return FALSE, or QueryPerformanceCounter return zero?

This won't occur on any system that runs Windows XP or later.

这是正确的,也许措辞略有变化:

This can occur on any system that runs Windows XP or later.

在某些情况下,QueryPerformanceFrequency 会返回 false。您可以通过 Google 搜索遇到问题的人。

我今天遇到了问题(在 Windows 7 上):

Int64 freq;
//...
QueryPerformanceFrequency(@freq);

函数调用失败(返回false),GetLastError返回:

ERROR_NOACCESS
998 (0x3E6)
Invalid access to memory location.

对齐很重要

如果您的 Int64 内存地址未双字(4 字节)对齐,则会出现此问题。例如,如果您使用默认为对象、结构或类成员变量的 ByteWord 对齐方式的编译器。在这种情况下,QueryPerformanceCounter 将返回 false。

注意:QueryPerformanceCounter 完全有可能只发生用于双字(4 字节)对齐,和 might actually require quad-word (8-byte) alignment . Windows x64 calling convention documentation对这个问题保持沉默。

也有可能 the CPU hardware is silently fixing up 4-byte alignment to 8-byte alignment ,它不会对 1、2、3、5、6 或 7 字节对齐执行相同的操作。如果这种新的驱动系统可以运行,也有可能使我们在大西洋的 SOSUS 警告网无法检测到“红色十月号”。

tl;dr

Under what circumstances does QueryPerformanceFrequency return FALSE, or QueryPerformanceCounter return zero?

如果变量未双字(8 字节)对齐,该函数可能会失败,错误代码为 ERROR_NOACCESS(对内存位置的访问无效)。

奖金聊天

文档:

Return value

If the installed hardware supports a high-resolution performance counter, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError. On systems that run Windows XP or later, the function will always succeed and will thus never return zero.

关于windows - 为什么 QueryPerformanceCounter/QueryPerformanceFrequency 会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27258698/

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