[英]C++ chrono::duration_cast always outputs "0 seconds"
這是我在這里提出的第一個問題,我也是 C++ 的完全新手,但我會盡力做到盡可能具體。 如果我含糊不清,請告訴我:
我正在嘗試使用 chrono 和 duration_cast 測量排序方法(合並排序)對給定整數數組進行排序所需的時間。 這是有問題的代碼片段:
auto t1 = std::chrono::high_resolution_clock::now();
mergesort(sortingArray, temp, 0, num - 1);
auto t2 = std::chrono::high_resolution_clock::now();
std::chrono::duration<double, std::milli> fp_ms = t2 - t1;
std::cout << fp_ms.count() << " seconds\n";
我得到的輸出總是“0 秒”,無論我制作它需要排序的數組有多大。 即使它對一百萬個整數進行排序並且有明顯的執行時間,它仍然給我相同的輸出。
我基本上遵循這里給出的例子: http : //en.cppreference.com/w/cpp/chrono/duration/duration_cast
我只是使用我的合並排序函數而不是 f() 。 我怎樣才能讓它正確衡量我的排序方法?
編輯:我在 Windows 10 中使用 minGW 通過 Powershell 進行編譯。命令如下所示:
g++ -std=c++11 .\Merge.cpp
TL;DR :看起來std::chrono
實現(libstdc++)在 Windows 上很差,你不會得到比秒更好的東西。
長版:
libstdc++ typedef
s std::chrono::high_resolution_clock
到std::chrono::system_clock
。 根據實現,調用std::chrono::system_clock::now()
將導致調用以下之一,具體取決於平台:
syscall(SYS_clock_gettime, CLOCK_REALTIME, ...)
,這是一個 Linux 系統調用clock_gettime(CLOCK_REALTIME, ...)
,這是 Windows 不支持的 POSIX 系統調用gettimeofday(...)
,這是 Windows 不支持的 POSIX 函數std::time()
作為后備因此, std::time()
在 Windows 上被內部調用。 未指定std::time()
的編碼; 但是,大多數系統都遵循POSIX 規范:
time() 函數應返回自 Epoch 以來的時間值(以秒為單位) 。
微軟本身並沒有相同的:
返回自 1970 年 1 月 1 日午夜以來經過的秒數,如果出現錯誤,則返回 -1。
我認為可以肯定地說,使用 MingW 的std::chrono
chrono 不會獲得更高的分辨率。
至於你的問題,你有兩個選擇:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.