2011-06-14 45 views
1

Hans和我最近就這個問題進行了小範圍的討論,我很好奇它是如何真正實現的。CLR是否內部產生一個線程來響應計時器事件?

見這裏的評論初始說話:Are c# timers naturally multithreaded?

+1

Downvote因爲單看這個問題和答案根本不提供任何信息。我必須去看另一個線索,以獲得在接受的答案中引用的「漢斯」的任何輸入,並且我必須去你的博客以獲得關於它如何工作的任何細節。 – Thymine 2012-04-25 19:30:43

回答

2

好吧,我做了一些調查......詳細信息可在我blog post

短,從那裏剛總結:

  • 至於SSCLI20漢斯是完全正確的。有真正獨立的線程來處理APC和排隊計時器。感謝你的堅持,順便說一句。我有機會挖掘一些有趣的東西:)
  • 在較新的系統上,它仍然可以實現沒有額外的線程。當我寫了CLR 2.0時,我錯誤地認爲它已經在那裏了。有關詳細信息,請參閱CreateThreadpoolTimer,SetThreadpoolTimer和CloseThreadpoolTimer。
2

凝望.NET 4.0的參考源,System.Timers.Timer似乎用一個System.Threading.Timer處理實際的實施細則。後者通過調用AddTimerNative來生成定時器。 AddTimerNative是一個內部電話。

使用谷歌搜索AddTimerNative導致了很多有趣的結果,其中包括Willy Denoyette的評論,他在那裏說,它調用CreateTimerQueueTimer

那頁指出「回調函數排隊到線程池」

相關問題