1

ハンスと私は最近このテーマについて小さな議論をしましたが、それが実際にどのように実装されているのか興味があります。

ここのコメントで最初の話を参照してください:c#タイマーは自然にマルチスレッド化されていますか?

4

2 に答える 2

2

.Net 4.0リファレンスソースを見つめて、実際の実装の詳細を処理するためSystem.Timers.Timerにを使用しているようです。System.Threading.Timer後者は、を呼び出すことによってタイマーを生成しますAddTimerNativeAddTimerNative内部呼び出しです。

グーグルは、 Willy DenoyetteAddTimerNativeのコメントを含む多くの興味深い結果につながります。彼は、 CreateTimerQueueTimerを呼び出すと述べています。

そのページには、「コールバック関数はスレッドプールのキューに入れられている」と記載されています。

于 2011-06-15T20:18:03.137 に答える
2

さて、私はいくつかの調査をしました...詳細は私のブログ投稿にあります

簡単に言うと、そこからの要約です。

  • SSCLI20に関してはハンスは完全に正しかった。APCとキューに入れられたタイマーを渡すための本当に別々のスレッドがあります。ところで、あなたの主張に感謝します。私は何か面白いものを掘る機会を得ました:)
  • 新しいシステムでは、追加のスレッドなしで実装できます。CLR 2.0が作成されたときに、すでにそこにあると誤解していました。詳細については、CreateThreadpoolTimer、SetThreadpoolTimer、およびCloseThreadpoolTimerを参照してください。
于 2011-06-16T01:27:53.720 に答える