簡體   English   中英

CLOCK_MONOTONIC最大值

[英]CLOCK_MONOTONIC Max value

由於達到最大值,clock_gettime()何時會使用CLOCK_MONOTONIC返回較小的值? 我並不是說那些被描述為bug的小扭曲,而是諸如計數器重置之類的東西。

它是時間測量的,還是與tick的絕對數量有關?

我必須實現一個計時器(1或2秒的間隔),並且我不需要那么多的精度。 但是,該應用程序可能運行了幾個小時而沒有重新啟動。 (我估計最多1天)。

我不會保證我不會犯任何可能導致它停止通信的錯誤。

timerfd已經解決了這個問題嗎?

由於struct timespec使用time_t值秒,因此可以覆蓋的完整范圍至少為68年。 考慮到CLOCK_MONOTONIC的定義是從任意點開始的,理論上clock_gettime可能會隨時溢出。 實際上,如果您的應用程序運行了幾十年,您只需要擔心這一點。 但是,如果您偏執狂,請創建一個包裝器函數,該函數會大聲抱怨並在發生計時器環繞時殺死應用程序。

正如“單調”名稱所暗示的那樣,CLOCK_MONOTONIC永遠不會回到過去,它一直在增長。 如果用戶或其他進程(例如NTP)更改了計算機上的“掛鍾”,則不會更改。 CLOCK_MONOTONIC是在計時器中使用的正確時標。 它最終可能會翻滾,但即使小心操作也可以干凈地處理。 對內部計時器使用相同類型的變量。

例如,如果時鍾回繞,則以下代碼將在夜間運行。 注意:kDelayInterval必須小於環繞周期(通常這不是問題)。

struct timespec current_time;
struct timespec last_update = {0,0};
  .
  .
  clock_gettime(CLOCK_MONOTONIC, &current_time);
  if((current_time.tv_sec - last_update.tv_sec) > kDelayInterval)
  {
    .
    .
    .
    clock_gettime(CLOCK_MONOTONIC, &last_update);
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM