C语言如何实现连续打印字符串10秒?现有代码死循环问题排查
代码错误点
- 循环内未更新计时变量:你仅在进入main函数时获取了一次
clock()的返回值存入ticks,整个循环过程中ticks的值永远不会变化,只要初始值小于你写的阈值,循环条件就永远成立,必然出现死循环。 - 数据类型溢出&单位使用错误:
clock()的返回值类型是clock_t不是int,你写的10000000000已经远超出32位int的最大值(约21亿),赋值给int会发生溢出,得到不可预期的数值。clock()的返回值单位是时钟打点次数,不是秒也不是纳秒,要转换成运行时长需要除以系统定义的宏CLOCKS_PER_SEC,10秒对应的打点数值应该是10 * CLOCKS_PER_SEC,不是你写的1e10。
- 计时逻辑不符合需求:
clock()统计的是进程占用CPU的时间,而printf属于IO操作,进程在等待IO输出的时间不会被计入CPU时间。如果你要的是现实时间流逝10秒就停止,用clock()本身就不符合需求,会出现实际运行很久才停止的问题。
修正后代码示例
如果需要按现实流逝时间计时10秒:
#include <stdio.h> #include <time.h> int main() { // 记录开始的时间戳(单位秒) time_t start = time(NULL); while(1) { // 每次循环判断当前时间和开始时间的差 if(difftime(time(NULL), start) >= 10) { break; } printf("Hello World\n"); } return 0; }
如果确实需要统计进程CPU占用时间满10秒停止:
#include <stdio.h> #include <time.h> int main() { clock_t start = clock(); while(1) { // 每次循环更新当前CPU耗时 if((double)(clock() - start) / CLOCKS_PER_SEC >= 10) { break; } printf("Hello World\n"); } return 0; }
内容的提问来源于stack exchange,提问作者Kowsar Rahman
相关产品推荐
相关产品推荐

