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

fre*_*ith 4 .net c# multithreading sleep

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

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

while (true) 
{
  dosomething(); //this is a very fast operation
  sleep(5 seconds);
}
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*lls 12

使用WaitHandle,如ManualResetEvent(或AutoResetEvent).

在您的类中,声明一个ManualResetEvent:

private ManualResetEvent myEvent = new ManualResetEvent(false);
Run Code Online (Sandbox Code Playgroud)

线程1:

while(true) {
    doSomething();
    myEvent.WaitOne(5000);
    myEvent.Reset();
}
Run Code Online (Sandbox Code Playgroud)

线程2:

myEvent.Set();
Run Code Online (Sandbox Code Playgroud)

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

编辑:上面添加了AutoResetEvent