You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C语言中统计程序运行时长并实现循环定时终止?

解决循环运行指定时长后终止的问题

你不需要拆分本地时间来计算差值,直接用time_t类型的时间戳差值就能完美解决跨天的问题——因为time_t存储的是从Unix纪元(1970年1月1日00:00:00 UTC)到当前时刻的总秒数,是一个单调递增的整数,跨天、跨年都不会影响差值计算。

具体实现代码

#include <time.h>
#include <stdio.h>

int main() {
    const int RUN_DURATION = 60; // 要运行的目标秒数
    time_t start_time = time(NULL);

    while (1) {
        // 计算已运行的秒数
        time_t current_time = time(NULL);
        double elapsed_seconds = difftime(current_time, start_time);

        // 达到指定时长就退出循环
        if (elapsed_seconds >= RUN_DURATION) {
            break;
        }

        // 这里编写你的循环业务逻辑
        printf("循环运行中...\n");
        // 可选:添加短延迟避免占用过多CPU
        // sleep(1);
    }

    printf("已运行满%d秒,循环终止\n", RUN_DURATION);
    return 0;
}

为什么原方法会失效?

你之前用localtime把time_t拆成了本地时间结构体(struct tm),里面的tm_sec、tm_min、tm_hour都是当天的相对值。比如在23:59启动,过1秒到00:00时,tm_sec会从59变成0,差值计算会得到负数,导致终止条件永远无法触发。而直接用difftime或者current_time - start_time(time_t通常是整数类型),得到的是绝对的秒数差,完全不受日期切换影响。

补充:更高精度的计时(如果需要)

如果场景需要毫秒/微秒级精度,而非秒级,可以用:

  • POSIX系统(Linux、macOS):clock_gettime(CLOCK_MONOTONIC, &ts),依赖单调时钟避免系统时间调整的干扰
  • Windows系统:QueryPerformanceCounter()搭配QueryPerformanceFrequency()计算高精度时间差

内容的提问来源于stack exchange,提问作者nat34

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 16:36:18