gpt4 book ai didi

clock_gettime 返回一些非常大的值

转载 作者:太空狗 更新时间:2023-10-29 11:07:12 25 4
gpt4 key购买 nike

我有一个在linux上运行的非常简单的代码,如下所示:

struct timespec SysTime_Test;
#define BILLION 1000000000L
SysTime_Test.tv_sec = 0;
SysTime_Test.tv_nsec = 0;
clock_settime(CLOCK_REALTIME,&SysTime_Test);
while(1) {
printf("%d ",clock_gettime(CLOCK_REALTIME,&SysTime_Test));
printf("%llu, %llu\n",SysTime_Test.tv_sec, SysTime_Test.tv_nsec);
fflush(stdout);
}

我希望开始:

0 0, 0

相反,我得到了:

0 97508642543791, 13184898790915571716
0 152071907084879, 13184898790915571716
0 184202557433736, 13184898790915571716
0 214744069882703, 13184898790915571716
............
0 688307164049923, 13184898790915571716
0 715983933311791, 13184898790915571716
0 743664997540956, 13184898790915571716
0 770706111642868, 13184898790915571716
0 798223967114747, 13184898790915571716
0 825746117553923, 13184898790915571716
0 853263973025802, 13184898790915571716
0 881898519994901, 13184898790915571716
0 909098547886802, 13184898790915571716
0 936779612115967, 13184898790915571716
0 964138553797857, 13184898790915571716
0 992455273186978, 13184898790915571716
0 1019973128658857, 13184898790915571716
0 1048130934257989, 13184898790915571716
..........
0 1318713873968989, 13184898790915571716
0 1346549557020846, 13184898790915571716
0 1374707362619978, 13184898790915571716
0 1402225218091857, 13184898790915571716
0 1430700851270967, 13184898790915571716
..........
0 2643470766924857, 13184898790915571716
0 2670988622396736, 13184898790915571716
0 2698828600415890, 13184898790915571716
0 2726187542097780, 13184898790915571716
0 2754027520116934, 13184898790915571716
0 2781704289378802, 13184898790915571716
0 2809544267397956, 13184898790915571716
0 2836903209079846, 13184898790915571716 (Big jump)
0 1434656352942746714, 13184898790915571716
0 1434694848734629725, 13184898790915571716
..................
0 1435769544041619659, 13184898790915571716
0 1435796907278268846, 13184898790915571716
0 1435824266219950736, 13184898790915571716

我尝试了不同的时钟 ID,但我仍然得到几乎相同的结果,中间有一个很大的跳跃,我做错了什么?

最佳答案

检查函数结果。

代码有意外的输出,但缺乏简单的检查来查看设置时间是否有效 @Steve Summit .我希望这是一个早期的调试步骤。

// clock_settime(CLOCK_REALTIME,&SysTime_Test);
if (clock_settime(CLOCK_REALTIME,&SysTime_Test)) {
puts("Fail Set");
}

使用正确的 *printf() 说明符

成员 tv_nsec 是一个long。使用 "%ld" 打印。 @Antti Haapala

printf("%ld", SysTime_Test.tv_nsec);

tv_sec 是一个time_t。在 Linux 系统上必须是一些整数类型 @Andrew Henle .转换到最宽(或至少是最宽)的类型并打印。

printf("%jd", (intmax_t) SysTime_Test.tv_sec);
// or
printf("%lld", (long long) SysTime_Test.tv_sec);

节省时间

打开所有编译器警告以更快地检测问题。

要清楚

“clock_gettime 返回一些非常大的值”--> 不是。该函数每次都按预期返回 0 并打印出来。 SysTime_Test 中的值出现意外肯定是因为它们没有正确打印。

关于clock_gettime 返回一些非常大的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46604024/

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