0
在VS2015上調用chrono::system_clock::now()
時,我看到一個奇怪的行爲。如果您在循環中調用chrono::system_clock::now()
,則生成的時間點似乎具有1毫秒的精度。下面是代碼:在VS2015中chrono :: system_clock :: now的精度
using cl = chrono::system_clock;
set<cl::time_point> s;
for(int i=0; i <1000'000;++i) {
s.emplace(cl::now());
}
for(const auto& x : s) {
cout << duration_cast<nanoseconds>(x.time_since_epoch()).count() << endl;
}
cout << "size of set " << s.size() << endl;
這裏是輸出時間戳的尾部(在納秒):
1,501,268,149,325,000,700
1,501,268,149,326,000,700
1,501,268,149,327,000,700
1,501,268,149,328,000,700
1,501,268,149,329,000,700
1,501,268,149,330,000,700
1,501,268,149,331,000,700
1,501,268,149,332,000,700
1,501,268,149,333,000,700
1,501,268,149,334,000,700
1,501,268,149,335,000,700
1,501,268,149,336,000,700
1,501,268,149,337,000,700
1,501,268,149,338,000,700
1,501,268,149,339,000,700
1,501,268,149,340,000,700
1,501,268,149,341,000,700
1,501,268,149,342,000,700
1,501,268,149,343,000,700
1,501,268,149,344,000,700
size of set 89
如可以從它好像SYSTEM_CLOCK時間戳可以看出在生成次1毫秒的精度。儘管windows system_clock應該具有100納秒的精度。請注意,對於一百萬條消息,它只產生了89個不同的時間戳。
如果我們使用clang運行相同的代碼,我們不會看到這個問題,在這種情況下的精度是1微秒。同樣在VS2015上使用steady_clock,精度爲1納秒。
是否有人知道爲什麼system_clock在VS2015上以這種方式表現?
當我運行用VS 2015編譯的代碼時,我看到100 ns的步數。我懷疑你是在無意中編譯和/或鏈接VS的舊版標準庫。 MSDN表示,對VS 2015中的時鐘進行了更改以符合標準。 –
我正在編譯對VS 2015版本14.0.25431.01更新3 – pchandra
這是我正在使用的確切版本,但我無法重現您的結果。你確定你得到了相應版本的標準庫,而不是以某種方式拾取一個較舊的版本? –