【问题标题】:Set thread to be fired at specific time设置线程在特定时间触发
【发布时间】:2014-01-18 23:25:21
【问题描述】:

我正在重构一个 vb.net windows 窗体应用程序,我们在线程中内置了一堆功能,这些线程始终运行,并且一旦不需要它们就会进入睡眠状态。 由于我们有只需要在一天中的特定时间运行的线程,因此我正在尝试获取一些在一天中的特定时间创建和调用线程的功能,根据我们定义的小时列表进行设置。

所以,我对我希望它们如何运行有了一个基本的想法,即,让我们举一个更具体的例子:

现在是下午 2 点(欧洲时间是 14 小时),我想创建线程,让它运行它的过程,一旦完成,关闭线程直到下午 5 点(当我想再次调用它时)。

如何在 vb.net 中实现这一点?

顺便说一下,我使用的是 .NET 4.0。

【问题讨论】:

  • 您需要精确到什么程度?例如,当您说线程必须在 17:00 运行时,它是否在 1、2 甚至 5 分钟内运行是否重要?
  • @mrlucmorin 好吧,其中一些,绝对没有问题。其他的应该间隔 30 分钟(这个越精确越好)
  • 你可以考虑使用像Quartz这样的调度框架。
  • @Blorgbeard 我听说过,但从未真正关注过它。你以前用过吗?你怎么看?
  • @Zed_Blade 我也没用过,只是听说推荐的。所以我自己不能完全推荐它,但听起来它可能值得一看。

标签: .net vb.net windows multithreading winforms


【解决方案1】:

正如 mrlucmorin 所说,时间的精确度真的很重要,你可以设置一个计时器来触发(每分钟、2 分钟、5 分钟,甚至 10 分钟对精确度很重要)虽然不是最佳的,但请检查一下系统时间,如果 14:00:00 在 datetime.now 加上 1 分钟和 datetime.now 之间,则创建线程,在线程末尾有代码以自行关闭。

14:00:00 和 17:00:00 可以保存在 mysql 数据库中,该数据库可以每小时检索一次,并使用变量来测试是否有任何时间落在计时器命中时的 1 分钟增量之间 -如果他们确实有它激活 mysql 数据库中的关联线程。

【讨论】:

  • 这是一种可能,但现阶段我仍然希望有一个简单的替代方案。不过会记住这一点
  • @Zed_Blade 我相信这很简单。根据应该运行它的机器上可用的资源,您甚至可以有一个每秒“唤醒”两次的计时器来与当前时间进行比较。这就是为什么我问你需要什么精度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多