繁体   English   中英

C ++-用std :: difftime编写调度程序-如何检查白天发生的时间(HH:MM:SS)?

[英]C++ - writing a scheduler with std::difftime - how to check for a time (HH:MM:SS) occurence during the day?

如果白天有活动到达,我会尝试让我的程序显示

例如,我希望能够在10:00:00创建事件,以便在一天中的这一时刻(仅一次)执行任务

所以我有一个可以告诉时间已经过去的函数,但是它将始终在10:00(时间参数)之后返回true。

bool Tools::passedTimeToday(std::time_t time)
{
    auto now = std::chrono::system_clock::now();
    std::time_t _now = std::chrono::system_clock::to_time_t(now);
    if (std::difftime(_now,time)<0)
        return false;
    else
        return true;
}

我如何检查时间只过去了一次?

那时我会使用某种epsilon吗? 我应该为那个epsilon使用什么值?

    double delta = std::difftime(_now,time);
    if ( (delta<0) && (delta>-epsilon) )
    {
        ...

我的意思是它可以工作,但是如果我的程序测试该条件太晚 (比epsilon大)怎么办?

我曾考虑过要使用布尔标志(经过布尔处理),但是在我运行程序时,它也将运行该时间发生的所有任务

任何帮助表示赞赏

谢谢

  1. 创建一个列表,其中包含计划的任务及其下一个运行时间(按下一个运行时间排序)。

  2. 当当前时间在列表中第一个任务的下一个运行时间之后时,将其从列表中删除,执行任务,然后将其添加回列表,运行时间增加一天(或所需的任何重复周期) )。

  3. 除非列表为空,否则请转到步骤2。

这是我的方法

我只接受5秒内的任务

bool Tools::passedTimeToday(std::time_t time)
{
    auto now = std::chrono::system_clock::now();
    std::time_t _now = std::chrono::system_clock::to_time_t(now);
    double delta = std::difftime(_now,time);

    if ( (delta>0) && (delta<5) )
        return true;
    else
        return false;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM