【问题标题】:What Windows API to look into for building a scheduling application?构建调度应用程序需要查看哪些 Windows API?
【发布时间】:2010-10-10 10:40:26
【问题描述】:

为什么不使用 Windows 调度程序? 我有几个应用程序必须根据业务规则在特定时间运行,而不是典型的每个工作日下午 1 点。

我还需要一种让应用程序提供其进度反馈的方法,以便我可以制定规则,在应用程序运行缓慢或什至不再运行时通知我。

我应该研究什么 Windows API? (例如,FileWatcher api 的时间版本)

让应用程序通知调度程序其进度(文件、套接字、Windows 消息、???)的最佳方式是什么?

【问题讨论】:

  • 这个问题太宽泛了。一个完全有效的答案是“1)打开 IDE。2)键入代码。3)编译。4)运行。6)利润”
  • 我认为最好提出一些您可能会遇到的具体问题,并为每个问题提出一个单独的问题。然后开始研究它,并在新事物出现时提出来。
  • 也许吧。但我认为这在以前已经做过很多次了,通过保持它有点宽泛,我可能会幸运地发现一些我从未想过要问的事情。
  • 另外,感谢您抽出宝贵时间向我提供有关此问题的反馈。

标签: windows delphi scheduling


【解决方案1】:

对于 Vista/Win2k8,有不错的 Task Scheduler 2.0 API:http://msdn.microsoft.com/en-us/library/aa384138(VS.85).aspx。以前的版本有Task Scheduler 1.0 API,但我从来没有用过。

【讨论】:

  • 我已经花了一点时间看这个;如果我只是想在某个时间运行某些东西,bizzaro 规则等等,这可能就是我要走的路。想要额外的反馈让我远离这个。
  • 对于通知,您可以考虑使用 WMI 提供者/订阅者模型。听起来您要收集的数据属于监控路线,因此这将是一种理想的机制。
【解决方案2】:

AppControls 有一个CronJob 组件,您可以使用它来创建预定事件。这使您的程序不必每分钟醒来并检查时间表本身。相反,只需安排作业并指示回调方法。

我自己使用这个组件来安排作业,并且对它的工作方式非常满意。

【讨论】:

    【解决方案3】:

    我认为您真正想要的是一个通用框架,用于您的应用程序向某些东西(您或系统消息或跟踪或性能、事件日志等)报告,并通过一些进程间协议接收一种接收消息的方式并做出回应。

    根据报告,您可以更改计划或进行更改等。

    所以,有一些监控应用程序,然后您的每个其他应用程序都会进行共同报告。

    我能想到的事件: - 开始 - 停止 - 错误 - 正常的日志消息 - 当然还有你的应用所做的特定事情。

    我认为可能存在执行此操作的现有类/框架 - 您必须四处检查。

    如果是我,我会创建一个可以与所有其他应用程序通信的服务,甚至可能是一个 http 服务器。它将能够将消息路由到特定应用程序并开始停止这些进程并查询它们。

    不过,有很多方法可以做你想做的事。这些只是我的想法。

    或者,您可能只是能够将这些作为服务,然后它们处理发送给它们的消息。在他们被一些任务命令“唤醒”之前,他们的正常处理什么都不做。

    【讨论】:

      【解决方案4】:

      你有更多的问题。通常你应该拆分它们。但是让我们忽略这一点并尝试回答。

      1. 要安排某些事件(包括运行应用程序):使用 JVCL 中的 TJvScheduledEvents。恕我直言JVCL 是最好的 Delphi 开源库,拥有大量组件、开发人员和支持。 TJvScheduledEvents 非常简洁,使用线程进行事件调度,并且您在 JVCL 中为您的事件提供了一个详细的编辑器(不过它需要一个小技巧才能使用它)。

      2. 从您的应用程序向(远程)中心点提供“反馈”:一个非常非常好的解决方案(如果您的要求允许)是将您的应用程序的进度记录在一个表中(我们称之为 LOG ) 在Firebird 服务器上。在 LOG 中,您可以有以下字段:COMPUTER、USERNAME、APPNAME、MSG、LOGDATE(等等)。在 LOG 表的 After Insert 触发器中,您可以触发一个事件(我们称之为 NEW_LOG)。在您的控制台应用程序中,您可以注册对此事件的兴趣,因此,您的应用程序将自动更新您的任何应用程序中发生的所有事情,因此您可以进行日志分析、图表等。当然您可以使用 IB 来完成,但是IB费用。

      ...在 Windows API 路由上,您需要标头(可能未翻译),您会遇到我们最亲爱的指针/PChars 等。当然,从头开始构建一切是不值得的,但是当这个已经用Delphi方式完成了,为什么不用呢?

      【讨论】:

        【解决方案5】:

        使用带有定期(例如每分钟)触发的计时器的服务。它读取计划并查看是否有一些在下一次迭代之前到期。如果是这样,您可以执行它们。

        您可以添加一个显示所有正在运行的应用程序的界面。对于使用桌面应用程序的反馈和查询。

        【讨论】:

          猜你喜欢
          • 2011-01-14
          • 2021-05-22
          • 1970-01-01
          • 2016-02-23
          • 2010-09-14
          • 1970-01-01
          • 1970-01-01
          • 2017-06-10
          • 2011-09-17
          相关资源
          最近更新 更多