如何在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
相关产品推荐
相关产品推荐

