2010-08-19 68 views
3

我想每5秒鐘做一些工作。根據系統時鐘,當我每5秒鐘說出00:00,00:05,00:10,00:15,00:20的意思。自定時器啓動後不是每5秒鐘一次。計時器與系統時鐘同步上升事件

是否有.net計時器可以做到這一點 - 我找不到一個?

我能想到的兩項工作變通的...

  1. 有一個非常高的分辨率計時器和讀取系統時鐘每個計時器事件。每完成5秒鐘後,立即開始工作。

  2. 具有非常高分辨率的定時器並讀取每個定時器事件的系統時鐘。在每個整個5秒鐘過後,立即啓動分辨率爲5秒的第二個定時器。

對任何一種方法都不滿意 - 第一種方法會在CPU上帶來不必要的負載(取決於分辨率有多高)。第二種方法可能會在很長時間後發生漂移。我不知道這是否屬實。

回答

1

不是直接的,但你可以設置一個短計時器在接下來的5s倍數處觸發,並且在那個事件處理器中設置每5秒計劃。

1

所有通常的定時器(WinForms,Threading,Timer)都有〜20 ms的分辨率。

您可以在一次模式下使用其中任何一種模式,並重新計算以毫秒爲單位的時間到下一個5秒點。預計0..100毫秒的錯誤。

如果這太多了,您將需要一個僱用計時器,但請注意,它們對您的系統來說是相當大的負載。

但請注意,您的線程/進程可以在任何時刻換出N * 20ms。

+0

如果我讓計時器繼續運行,每5秒發生一次事件,它會最終漂移還是平均長時間運行?我不介意由於線程引起的一些漂移,但只要在進程交換回來的時候自行分類,那就沒問題了。 – flobadob 2010-08-19 13:35:46