gpt4 book ai didi

c# - 用 C++ 高精度测量时间

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:00:46 29 4
gpt4 key购买 nike

如何在 C++ 中像在 C# 中一样准确地测量某些东西?

这是我的C#代码

var elapsedMilliseconds = (double)(sw.ElapsedTicks * 1000L) / Stopwatch.Frequency;

我正在使用 visual studio 2010。

最佳答案

C# 中的 Stopwatch 类基于这两个 Win32 API 调用,您可以从 C/C++ 调用它们:

调用第一个函数除以第二个函数得到一个值,以秒为单位。

例子:

LARGE_INTEGER freq, start, end;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&start);
// do some long operation here
Sleep(5000);
QueryPerformanceCounter(&end);
// subtract before dividing to improve precision
double durationInSeconds = static_cast<double>(end.QuadPart - start.QuadPart) / freq.QuadPart;

请注意,文档中的以下评论是真实的,应该予以考虑。我个人在 VirtualBox 虚拟机中观察到这种行为。不同处理器之间可能存在数十毫秒的差异,从而导致意外结果,例如持续时间为负数和持续时间长于预期:

On a multiprocessor computer, it should not matter which processor is called. However, you can get different results on different processors due to bugs in the basic input/output system (BIOS) or the hardware abstraction layer (HAL). To specify processor affinity for a thread, use the SetThreadAffinityMask function.

您可能对此感兴趣:System.Diagnostics.Stopwatch returns negative numbers in Elapsed... properties

请注意,如果上述两个 API 不可用或返回失败代码,Stopwatch 类将回退到 GetTickCount。这可能只是为了保持与 Windows 9x 的兼容性;我自己在现代 PC 上使用这些 API 时没有遇到任何问题。但是,GetTickCount 不会有您想要的精度。

关于c# - 用 C++ 高精度测量时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14260238/

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