在事件发生之前保持线程活动

本文关键字:线程 活动 事件 | 更新日期: 2023-09-27 18:08:34

如何保持线程存活直到某些事件发生?我有一个客户端线程,它正在等待来自服务器的消息,该消息将在客户端上引发事件(我无法更改此行为)。有多个这样的客户端在等待messagerreceived事件。应该尽可能减少延迟,因此让线程休眠一段时间并不是一个好的选择。

目前我唯一的选择是让线程在while循环中保持忙碌,以便它们在事件触发时处于活动状态。有更好的选择吗?

在事件发生之前保持线程活动

使用ManualResetEvent。你可以创建这个对象,然后使用WaitOne(),然后从另一个线程中调用Set()来释放之前的阻塞调用。

的例子:

ManualResetEvent mre = new ManualResetEvent();
public void OnOneThread()
{
    //Block here until "OnAnotherThread" is done
    mre.WaitOne();
}
public void OnAnotherThread()
{
    DoWork();
    //Release the other thread
    mre.Set();
}

我不知道这有多大帮助,
在我曾经做过的一个练习中,我是如何处理多线程的,
它更多的是线程之间同步的解决方案,但我想它也可以适用。
我使用了互斥锁,在线程调用的函数中,我添加了WaitOne()(我认为它是这样调用的),
一旦我想让线程运行,我就解锁了互斥锁。你也可以这样做,也许当事件被触发时,解锁互斥锁。

编辑:我上面的答案说的是真的。综上所述,它是一个manualreseevent而不是一个互斥对象。

但是你也可以使用我写的方法,只要用ManualResetEvent切换互斥锁