4

.NET(C#)を使用しています。

T1とT2を実行している2つのスレッドがあり、T1は次のようになります。

while (true) 
{
  dosomething(); //this is a very fast operation
  sleep(5 seconds);
}

同時に、T2はまったく異なることをしていますが、睡眠時間が経過していなくても、T1が睡眠から目覚めるようにキックを与える必要があります。どうすればよいですか?

4

2 に答える 2

12

ManualResetEvent(またはAutoResetEvent )のようなWaitHandleを使用します。

クラスで、ManualResetEventを宣言します。

private ManualResetEvent myEvent = new ManualResetEvent(false);

スレッド1:

while(true) {
    doSomething();
    myEvent.WaitOne(5000);
    myEvent.Reset();
}

スレッド2:

myEvent.Set();

Thread1は、5秒間、またはManualResetEventが設定されるまでのいずれか早い方で待機します。

編集:上記のAutoResetEventを追加

于 2009-06-08T01:31:31.087 に答える
0

それをしたい場合は、スレッドをスリープ状態にしないでください。このSOの質問を見てください。また、このブログエントリは有望なようです。

それについてもっと情報をグーグルで検索したい場合は、.NETなどで「スレッドシグナリング」を検索することをお勧めします。

于 2009-06-08T01:29:50.857 に答える