从另一个线程中唤醒一个线程

时间:2009-06-08 01:25:05

标签: c# .net multithreading sleep

我正在使用.NET(C#)。

如果我有2个线程运行T1和T2而T1是这样的:

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

同时T2正在做一些完全不同的事情,但有时它需要给T1一个踢,这样即使睡眠时间不到,它也会从睡眠中醒来。我该怎么做?

2 个答案:

答案 0 :(得分:12)

使用WaitHandle,例如ManualResetEvent(或AutoResetEvent)。

在你的班级中,声明一个ManualResetEvent:

private ManualResetEvent myEvent = new ManualResetEvent(false);

线程1:

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

线程2:

myEvent.Set();

Thread1将等待5秒或直到ManualResetEvent设置为止,以先到者为准。

编辑:在上面添加了AutoResetEvent

答案 1 :(得分:0)

如果你想这样做,不要让你的线程进入睡眠状态。看一下this SO问题。此外,this博客条目似乎很有希望。

如果您想要GOOGLE上有关它的更多信息,您可能希望在.NET中搜索“线程信令”或类似内容。