C# 从一个线程唤醒另一个线程

C# 从一个线程唤醒另一个线程,c#,.net,multithreading,sleep,C#,.net,Multithreading,Sleep,我正在使用.NET(C#) 如果我有两个线程运行T1和T2,T1是这样的: while (true) { dosomething(); //this is a very fast operation sleep(5 seconds); } 与此同时,T2正在做一些完全不同的事情,但有时它需要给T1一个脚踢,这样它就可以从睡眠中醒来,即使睡眠时间还没有结束。我该怎么做呢?如果你想这样做,不要让你的线程休眠。看看这个问题。此外,博客条目似乎很有希望 如果你想在谷歌上搜索更多信息,你可能想

我正在使用.NET(C#)

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

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

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

如果你想这样做,不要让你的线程休眠。看看这个问题。此外,博客条目似乎很有希望

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

使用WaitHandle,比如(或)

在类中,声明ManualResetEvent:

private ManualResetEvent myEvent = new ManualResetEvent(false);
线程1:

while(true) {
    doSomething();
    myEvent.WaitOne(5000);
    myEvent.Reset();
}
线程2:

myEvent.Set();
Thread1将等待5秒钟或直到ManualReset事件设置完毕,以先到者为准


编辑:在上面添加了AutoResetEvent

在这种情况下,最好使用“AutoResetEvent”,这样就不需要回答诸如“如果T2信号正好在WaitOne之后会发生什么情况?”之类的问题……同意。AutoResetEvent可能更简单。顺便说一句,即使T1在5秒到期之前被唤醒,您也不确定T1是否会在这5秒结束之前引起调度程序的注意。不要过于依赖这种假设!很可能更早地唤醒线程将允许更早地完成工作。。。但这可能发生,也可能不会发生。