[英]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大)怎么办?
我曾考虑过要使用布尔标志(经过布尔处理),但是在我运行程序时,它也将运行该时间发生的所有任务
任何帮助表示赞赏
谢谢
创建一个列表,其中包含计划的任务及其下一个运行时间(按下一个运行时间排序)。
当当前时间在列表中第一个任务的下一个运行时间之后时,将其从列表中删除,执行任务,然后将其添加回列表,运行时间增加一天(或所需的任何重复周期) )。
除非列表为空,否则请转到步骤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.