我想让一个线程在后台运行,它将在给定的时间间隔内检查到某些服务器的连接。例如,每5秒一次。

我不知道这是否有很好的“设计模式”吗?如果我没记错的话,我在这里已经读到了一些东西,那就是它的execute方法中的休眠线程并不好。但是我可能错了。

此外,我可以使用普通的TThread类或OTL线程库。

有什么想法吗?

谢谢。

有帮助吗?

解决方案

您可以使用事件,并通过Execute等待事件的循环来实现TThread后代的WaitForSingleObject方法,并指定超时。这样,您可以在需要时立即唤醒线程,例如终止时。

其他提示

OmniThreadLibrary 中,您可以这样做: 通用标签

关于在Execute中睡眠-这取决于您的操作方式。如果使用“睡眠”,那么这可能不是很明智(例如,因为它可以防止线程在睡眠期间停止)。和WaitForSingleObject一起睡觉是可以的。

TThread和WaitForSingleObject的示例: 通用标签

OTL计时器的实现类似于上面的TThread代码。OTL计时器保留在优先级列表中(基本上,计时器按“下次发生”时间排序),并且TOmniWorker中的内部MsgWaitForMultipleObjects调度程序为最高优先级计时器指定适当的超时值。

如果线程在应用程序的生命周期内运行,可以在应用程序关闭时由操作系统简单地终止并且不需要准确的时间安排,为什么还要烦恼需要比sleep(5000)更多输入的解决方案?

要添加另一种实现5秒事件的方法,可以使用与TTimer类似但不依赖于您的应用程序的Multimedia Timer。配置完后(您可以设置单发或重复),它会在另一个线程中回叫您。从本质上讲,它非常准确(在1ms以内)。在此处查看一些示例Delphi代码

调用计时器的代码很简单,并且在所有Windows平台上都支持。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top