基本上,我想创建一个程序来检查月,日和年,并且如果满足月和日标准,将执行代码。
例如,我们假设日期是2016年7月8日。
让我们说我有一些代码只是希望程序输出" Hello world!"在这个日期。
我希望此代码在2016年7月8日执行,而不是其他日期。我该怎么做呢?
答案 0 :(得分:2)
要在某个时间运行您的程序,您必须依赖外部工具,例如cron
或Windows任务计划程序。如果程序尚未运行,则程序无法自行运行: - )
如果您的代码 正在运行,并且您只是希望它在某个特定时间之前延迟操作,那就是ctime
标头中的所有内容都是为了。
您可以使用time()
和localtime()
将当地时间转换为struct tm
,然后检查字段以检查某个特定时间是否是最新的。如果是这样,请采取行动。如果没有,请循环并再试一次(如果需要,可以适当延迟)。
举例来说,这是一个输出时间但仅限于五秒边界的程序:
#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;
int main() {
time_t now;
struct tm *tstr;
// Ensure first one is printed.
int lastSec = -99;
// Loop until time call fails, hopefully forever.
while ((now = time(0)) != (time_t)-1) {
// Get the local time into a structire.
tstr = localtime(&now);
// Print, store seconds if changed and multiple of five.
if ((lastSec != tstr->tm_sec) && ((tstr->tm_sec % 5) == 0)) {
cout << asctime(tstr);
lastSec = tstr->tm_sec;
}
}
return 0;
}
答案 1 :(得分:1)
我会使用std::this_thread::sleep_until(time_to_execute);
,其中time_to_execute
是std::chrono::system_clock::time_point
。
现在问题变成:如何将system_clock::time_point
设置为正确的值?
Here is a free, open-source library可以轻松地将system_clock::time_point
设置为特定日期。使用它看起来像:
using namespace date;
std::this_thread::sleep_until(sys_days{jul/8/2016});
这将在2016-07-08 00:00:00 UTC触发。如果您希望根据当地时间或某个任意时区触发here is a companion library来实现此目的。
您还可以下拉到C API并设置std::tm
的字段值,将其转换为time_t
,然后将其转换为system_clock::time_point
。它更加丑陋,更容易出错,并且不需要第三方库。