我很好奇C++中是否有內置函數來測量執行時間? 我現在正在使用Windows。在Linux中它很容易...找到C++執行時間
5
A
回答
4
據我所知,Windows上的最佳方式是使用QueryPerformanceCounter
和QueryPerformanceFrequency
。
QueryPerformanceCounter(LARGE_INTEGER*)
將性能計數器的值放入傳遞的LARGE_INTEGER中。
QueryPerformanceFrequency(LARGE_INTEGER*)
將性能計數器遞增的頻率放入傳遞的LARGE_INTEGER中。
然後,您可以通過記錄計數器開始執行,然後在執行完成時記錄計數器來查找執行時間。從最後減去開始以獲得計數器的更改,然後除以頻率以獲得以秒爲單位的時間。
LARGE_INTEGER start, finish, freq;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&start);
// Do something
QueryPerformanceCounter(&finish);
std::cout << "Execution took "
<< ((finish.QuadPart - start.QuadPart)/(double)freq.QuadPart) << std::endl;
2
這是在Windows下很容易的事 - 事實上這是兩個std::clock, d相同的功能<ctime>
1
C++ efined已經爲高粒度測量代碼執行時間沒有內置功能,你必須訴諸平臺特定的代碼。對於Windows,請嘗試QueryPerformanceCounter:http://msdn.microsoft.com/en-us/library/ms644904(VS.85).aspx
1
您應該使用的函數取決於您需要的計時器的分辨率。其中一些提供10ms分辨率。這些功能更易於使用。其他人需要更多的工作,但提供更高的分辨率(並且在某些環境中可能會導致一些令人頭疼的問題,儘管您的開發機器可能工作正常)。
http://www.geisswerks.com/ryan/FAQS/timing.html
該文章中提到:
- timeGetTime
- RDTSC(處理器功能,而不是操作系統的功能)
- QueryPerformanceCounter的
2
您可以使用Windows API功能GetTickCount()並比較st藝術和結束。分辨率在16毫秒的球場內。如果由於某種原因,您需要更細粒度的時機,您需要查看QueryPerformanceCounter。
0
相關問題
- 1. C++:問題找到代碼執行時間
- 2. 時鐘() - 執行時間爲c函數
- 3. 查找時間差並執行條件
- 4. 查找方法的執行時間
- 5. 找出sandbox.open(url,null .....)執行時間
- 6. 查找執行時間subprocess.Popen蟒蛇
- 7. 如何在c#中查找編碼執行時間?
- 8. 如何找到一個C++可執行
- 9. C/Linux中的線程執行時間
- 10. 10毫秒C++執行時間
- 11. 程序執行的C++測量時間
- 12. 使用C#測量執行時間
- 13. C++編譯時間函數執行
- 14. 如何控制執行時間C
- 15. (C++)合併排序執行時間
- 16. 無法在C(popen)中執行命令執行時間?
- 17. 任務執行時間高於定時器執行時間
- 18. 負執行時間
- 19. button.onclick執行時間
- 20. FlexUnit執行時間
- 21. mysql執行時間
- 22. 找到SUM時查詢執行速度
- 23. Typescript:在執行時找不到模塊
- 24. 執行類時未找到罐子
- 25. SOQL查詢到更多的時間來執行從C#
- 26. LINQ查詢找到在時間C#
- 27. 找不到C++時間戳標識
- 28. 執行c#超時
- 29. 可執行找到32位Java時,它應該找到64位
- 30. 執行sys.dm_fts_parser到C#