2013-10-31 60 views

回答

2

只有當回調正在執行。請注意,如果回調的持續時間長於定時器間隔,則多個線程池線程將最終同時執行回調。

3

是的。和不。這取決於你的.NET框架版本。傳統上不是,它消耗了整個線程。由CLR開始處理所有活動計時器。

並非如此,更新的版本,如我的4.5.1在Windows 8.1上運行。它已切換到使用CreateTimerQueueTimer完成該任務。這是由操作系統彙集的。

通過啓用非託管調試並設置定時器回調的斷點來獲得洞察。看看調用堆棧。

+0

因此在早期版本中,單個「管理」線程是一個ThreadPool線程,而在當前版本中,它是彙集在線程池之外的。如果你有幾百個定時器在運行,我更擔心會發生什麼。 –

+0

不,這是一個真正的線程。不,沒有必要擔心數百個定時器。該方案很簡單,只需要一個線程來處理任意數量的定時器。成千上萬沒事。它所要做的就是等待即將到期的* first *計時器。一旦滴答,或另一個計時器被添加或更改,所需要的就是找到下一個計劃。十分簡單。 –

+0

這是我的想法,但我想確認....謝謝。 –