gpt4 book ai didi

在 while 循环中每 40 秒调用一个函数

转载 作者:太空宇宙 更新时间:2023-11-04 08:08:30 25 4
gpt4 key购买 nike

此代码在循环内每 40 秒调用一个函数。由于 time_t 在我的 linux 系统中签名,我对这种情况表示怀疑:

if ((time_left <= 0 || time_left > interval))

仅检查 (time_left <= 0)美好的?我引用了一些网站,他们还添加了对 time_left > interval 的检查。 .是否需要进行此项检查?

int print_timed_op()
{
time_t time_now;
time_t time_left;
time_t time_next_interval;
int interval = 40, hit_count =10; //40 second interval, 10 times
time_next_interval = time(0) + interval;

//tight loop
while (1) {
sleep(1);
time_now = time(0);
time_left = time_next_interval - time_now;
/* here time_left > interval check required ? */
if ((time_left <= 0 || time_left > interval)) {
call_my_fuc();
time_next_interval = time(0) + interval;
time_left = interval;
hit_count--;
}

if(hit_count <= 0)
break;
}
return 0;
}

注意:我不想使用 Linux 定时器系统调用或任何其他方法来定期调用该函数。

最佳答案

检查 time_left > interval 是为了处理时钟变化或同步。如果您的间隔是 40 秒,并且有人过来更新系统时钟以将其提前一小时,那么如果您没有进行该检查,您将错过 90 次更新。

您可以使用带有 CLOCK_MONOTONIC 选项的 clock_gettime() 以更精确的方式解决这个问题。这样时间就永远不会向前或向后跳跃,并且您的函数调用将始终间隔均匀。

关于在 while 循环中每 40 秒调用一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41072085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com