C 检查是否经过了一定的时间

C 检查是否经过了一定的时间,c,time,C,Time,我目前正试图找出最好的方法来判断X秒是否已经过去。我心目中的基本实施方案如下: wait_for = 5; // 5 seconds ready_at = current_time() + wait_for; // might wrap around! :( ... /* There is no sleep call; there will be processing happening. */ ... if (current_time() >= ready_at)

我目前正试图找出最好的方法来判断X秒是否已经过去。我心目中的基本实施方案如下:

wait_for = 5;   // 5 seconds

ready_at = current_time() + wait_for;    // might wrap around! :(


...

/* There is no sleep call; there will be processing happening. */

...


if (current_time() >= ready_at)     // might also have wrapped around!
    do_stuff()
很简单,对吧?问题是进程本身将运行很长时间,尽管相比之下,
等待
的时间将非常短,但我担心
当前时间
将结束,事件不会触发。出于显而易见的原因,这段代码测试起来相当烦人

因此,我的问题是:

  • 使用什么样的最佳时间分辨率方法?我更喜欢posix中的东西,但是linux兼容已经足够好了。十分之一秒的分辨率就足够了。(也就是说,在特别糟糕的情况下,检查可能不会执行超过一个小时!)

  • 如何正确地处理两者的时间循环 a) ready_at的计算,以及 b) 检查它是否准备好了

  • 提前启动
    do_stuff()
    并不是一个真正的选择


    我很清楚这一点的逻辑本身应该不会太难,但我在这一点上正在周而复始地进行推理。我的大脑根本不会配合我。

    你担心……整数溢出?也许你应该看看这是否相关。(这不是一个64位整数。)不管怎样,使用
    clock\u gettime
    (posix)并传递
    clock\u MONOTONIC
    。我担心溢出以及计时器缠绕,从而破坏检查。当然,如果您担心时钟将循环。你为什么需要这样精确的时间。使用分钟和seconds@Stigma字体哦,你是说23:59→ 0点左右
    clock_gettime
    不返回一天中的时间;别担心。我认为在没有时钟的情况下获得更高精度的唯一方法就是创建一个时钟线程,让它休眠一微秒或者其他什么。这将明显影响您在该线程中的处理时间。不要尝试使用滴答的过程,因为根据经验,我发现延迟时间w是不可接受的。