Sil*_*611 4 c# c++ visual-studio-2010
我如何像在C#中一样准确地测量C++中的某些内容?
这是我的C#代码
var elapsedMilliseconds = (double)(sw.ElapsedTicks * 1000L) / Stopwatch.Frequency;
Run Code Online (Sandbox Code Playgroud)
我正在使用visual studio 2010.
Jam*_*ton 14
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;
Run Code Online (Sandbox Code Playgroud)
请注意,文档中的以下注释是真实的,应予以考虑.我个人在VirtualBox虚拟机中观察到了这种行为.不同处理器之间可能存在数十毫秒的差异,从而导致意外结果,例如负持续时间和长于预期的持续时间:
在多处理器计算机上,调用哪个处理器无关紧要.但是,由于基本输入/输出系统(BIOS)或硬件抽象层(HAL)中的错误,您可以在不同的处理器上获得不同的结果.要指定线程的处理器关联,请使用SetThreadAffinityMask函数.
您可能对此感兴趣:System.Diagnostics.Stopwatch在Elapsed ...属性中返回负数
请注意,如果以上两个API不可用或返回失败代码,则Stopwatch类将依赖于GetTickCount.这可能只是为了保持与Windows 9x的兼容性; 在现代PC上,我自己没有遇到过这些API的任何问题.但是,GetTickCount不具备您想要的精度.
| 归档时间: |
|
| 查看次数: |
2694 次 |
| 最近记录: |