在事件发生之前保持线程活动
本文关键字:线程 活动 事件 | 更新日期: 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()(我认为它是这样调用的),
一旦我想让线程运行,我就解锁了互斥锁。你也可以这样做,也许当事件被触发时,解锁互斥锁。
但是你也可以使用我写的方法,只要用ManualResetEvent切换互斥锁