4

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

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

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

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

4

2 回答 2

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

于 2009-06-08T01:31:31.087 回答
0

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

如果您想在 GOOGLE 上获得更多信息,您可能想在 .NET 或类似的东西中搜索“线程信号”。

于 2009-06-08T01:29:50.857 回答