我有一个线程从网络或串行端口获取一些数据。如果 5 秒内没有收到数据,则线程必须终止(或返回 false)。
换句话说,如果线程运行时间超过 5 秒,则必须停止。
我用 C# 编写,但任何 .NET 语言都可以。
有两种方法:
1.封装超时
从网络或串行端口读取数据的线程可以测量从启动时间起经过的时间,并等待数据不超过剩余时间。网络通信 API 通常提供指定方法timeout进行操作。因此通过做简单的DateTime
您可以将超时管理封装在工作线程中。
2. 外部超时
使用另一个线程(或者如果可行的话在主线程中执行)等待工作线程在一定的时间限制内完成,如果没有完成,则中止它。像这样:
// start the worker thread
...
// give it no more than 5 seconds to execute
if (!workerThread.Join(new TimeSpan(0, 0, 5)))
{
workerThread.Abort();
}
推荐:我会坚持第一个解决方案,因为它会带来更干净且可维护的设计。然而,在某些情况下,可能需要提供“硬”中止此类工作线程的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)