【问题标题】:How to schedule a task in C++如何在 C++ 中安排任务
【发布时间】:2011-05-15 01:03:26
【问题描述】:

我有一个 C++ windows 服务,它应该每 15 分钟调用一次函数。我是 C++ 新手,不知道该怎么做。谁能告诉我如何做到这一点?

谢谢, 子类

【问题讨论】:

    标签: c++ windows scheduling


    【解决方案1】:

    致电SetTimer()

    或者,使用Task Scheduler API,它可以按照预定义的时间表执行常规的.exe 或COM 处理程序。如果你这样做,你甚至可能不需要服务。

    【讨论】:

    • +1 无需为如此简单的特定平台需求引入 Boost。
    • 如何使用任务调度程序?我查看了 MSDN 文章。他们不是很清楚。我想执行一个.exe。激活时如何指定地址?
    • @Subrat:这里是 Task Scheduler 2.0 API(Vista 及更高版本)的教程:msdn.microsoft.com/en-us/magazine/cc163350.aspx。如果您需要 XP 支持,您将需要查看较旧的 1.0 API。以下是一些示例:msdn.microsoft.com/en-us/library/aa383579.aspx.
    • 我在 C++ 中创建了一个调度程序。我已经设置了所有参数,并且任务配置为仅在用户使用提供的用户名登录时运行(通过设置 TASK_FLAG_RUN_ONLY_IF_LOGGED_ON 标志完成)。当我尝试运行任务时,我得到“无法启动”状态。现在假设我手动编辑任务属性中的任何属性并单击“确定”任务运行正常。注意:指定的手动编辑可以是任何东西,例如在可执行名称或用户名的末尾添加一个空格。可能是什么问题?
    【解决方案2】:

    有很多库可以提供计时器。

    您使用什么操作系统和库?您可以使用Boost::Timer(甚至来自ctime 标头的标准C 时间相关函数)自己实现一个,或者,如果您使用的是处理主循环的库,它肯定会提供一些功能。

    【讨论】:

    • 这可能是一个愚蠢的问题 :)。那里的文件有 .hpp 扩展名。这些是什么?我可以在我的代码中使用它吗?我的文件有 .cpp 扩展名。
    • 它们是 C++ 的头文件。您可以像使用带有 .h 扩展名的经典头文件一样使用它们:只需将它们包含在 #include <HEADER.hpp>
    • 在 Boost 文档中找到了这个。不要以为我可以使用它。对于所提供的实施,最大可测量经过的时间可能低至 596.5 小时(甚至更少)。由于这些限制,不能依赖此计时器是稳健的,如果有任何顾虑,则不应使用。
    • @Subrat:当然,15 分钟的计时器可以随时工作。无论如何,我认为在大多数情况下使用 Boost::Timer 是正确的方法;如果您对某些特殊系统有一些非常特殊的需求,您应该只为这些系统重新实现您的计时器例程(使用宏条件:#ifdef),使用可以满足您需求的系统特定调用。
    【解决方案3】:

    C++ 中有<ctime> 标头(C 中为<time.h>),它提供了一些基本的低级时间功能。但是,如果您正在寻找更接近 c# 计时器的东西,那么您可以使用 Qt 的 QTimer 类。了解Qt - 这是一件好事。

    【讨论】:

    • Qt 不错,但如果这是给公司的,你要知道Qt 不是免费的。
    • Qt LGPL 切换已经快两年了。
    猜你喜欢
    • 2016-11-20
    • 2012-05-02
    • 2013-03-30
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    相关资源
    最近更新 更多