2016-08-03 68 views
-1

我是新的推動和計時。我正在寫一個日誌記錄器,記錄API調用的時間戳,進入和退出。我首先嚐試使用boost :: xtime,但沒有提供我需要的高分辨率值。因此正在考慮使用Chrono。我聲明瞭一個boost :: chrono :: hight_resolution_clock :: time_stamp x;獲取時間戳並將其分配給boost :: chrono :: hight_resolution_clock :: now();的變量。現在,我需要從這個變量中獲得納秒,並將其放入我的日誌文件中(這就是要求)。所以我投它boost :: chrono :: duration_cast(x)。但它不會讓我這樣做。它顯然需要2個參數,而我只有一個參數。有沒有辦法解決這個問題?是否有可能創建另一個time_stamp變量並將其賦值給它並使用該變量?我試圖分配零,但它不工作。請幫助我。如何從boost :: chrono :: hight_resolution_clock :: time_point獲取納秒數?

感謝, 山姆

+0

您的目標系統實際上是否能夠實現_nanosecond_ timer分辨率? –

+1

你想要幾納秒_since_?你希望自上一整秒(高分辨率時間戳)以來的納秒,還是你想從時代開始納秒,或者什麼? –

+0

是的,我的目標系統具有納秒級的分辨率。我需要納秒級的當前時間(高分辨率時間戳)。 – Sam

回答

2

如果標記c++11,有什麼理由不使用std::chrono

// Using std::chrono 
auto start = std::chrono::high_resolution_clock::now(); // start timer 

/* do some work */ 

auto diff = std::chrono::high_resolution_clock::now() - start; // get difference 
auto nsec = std::chrono::duration_cast<std::chrono::nanoseconds>(diff); 
std::cout << "it took: " << nsec.count() << " nanoseconds" << std::endl; 
+0

嗨,Remis,這不是用於獲得納秒時間的解決方案嗎?是否有可能獲得納秒級的當前時間?請指教 – Sam

+0

「納秒當前時間」是什麼意思?時間點被定義爲由時鐘定義的歷元之後的持續時間。例如1970-01-01是UNIX系統的時代。因此,「當前時間」大約是自一個時代以來的1,470,252,780,000,000,000納秒。 – Remis

+0

在章節[5.7中尋找更多信息。 Clocks and Timers](http://www.informit.com/articles/article.aspx?p=1881386&seqNum=2),來自C++標準庫,The:A Tutorial and Reference。 – Remis

1

boost::chrono::duration_cast的持續時間轉換成指定的單位,但你給它一個boost::chrono::time_point,而不是時間。

真的沒有「當前時間以納秒爲單位」「。要獲得持續時間,您需要指定您想要知道已經過去了多少納秒的時間(「時代」)。不同的時鐘會根據不同的時代測量他們的時間。 (目前)使用Unix時代(1970年1月1日午夜)作爲它的時代,但它並不穩定,它可能沒有你需要的分辨率(我的Ubuntu盒子的分辨率是納秒,但是在1/1000,000在我的Windows機器上秒鐘)。

boost::chrono::high_resolution_clock使用引導作爲其時代,是穩定的,並在我測試的兩個盒子上測量時間(以納秒爲單位)。

Boost還提供其他時鐘,如process_cpu_clock,其他時鐘使用其他時期並在其他單位計數。

因此,你可以使用system_clock得到毫微自1970年1月1日,但它實際上可能沒有納秒準確,如果用戶更改系統時間或在計算機與網絡時間同步,可能走回頭路,或者你可以從其他時間點使用high_resolution_clock獲得納米級。

相關問題