我正在使用 .NET (C#)。
如果我有 2 个线程运行 T1 和 T2 并且 T1 是这样的:
while (true)
{
dosomething(); //this is a very fast operation
sleep(5 seconds);
}
与此同时,T2 正在做一些完全不同的事情,但是它有时需要给 T1 踢一脚,这样即使睡眠时间还没有到,它也会从睡眠中醒来。我该怎么做呢?
我正在使用 .NET (C#)。
如果我有 2 个线程运行 T1 和 T2 并且 T1 是这样的:
while (true)
{
dosomething(); //this is a very fast operation
sleep(5 seconds);
}
与此同时,T2 正在做一些完全不同的事情,但是它有时需要给 T1 踢一脚,这样即使睡眠时间还没有到,它也会从睡眠中醒来。我该怎么做呢?
使用 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