gpt4 book ai didi

c - 如何实现 timespec 累加器?

转载 作者:IT王子 更新时间:2023-10-29 01:00:43 27 4
gpt4 key购买 nike

在累积 struct timespec 增量的程序中,我正在执行以下逻辑:

struct timespec accu, start, stop;

for (...) {
// record start
// perform some logic
// record stop

accu.tv_sec += stop.tv_sec - start.tv_sec;
accu.tv_nsec += stop.tv_nsec - start.tv_nsec;
if (accu.tv_nsec >= 1000000000L) {
accu.tv_nsec -= 1000000000L;
++accu.tv_sec;
}
} // end for loop

但是,当我使用以下方法打印结果时:

printf("%lld.%.9ld\n", (long long) accu.tv_sec, accu.tv_nsec);

我有时会看到这样的结果:1.-611075708

accu.tv_nsec 中的负值我做错了什么?

注意:start & stop 使用 clock_gettime() 检索。

最佳答案

struct timespec 转换为 uint64_t 自纪元以来的纳秒数,并在它们之间取增量并轻松累加它们。例如:

#include <time.h>
#include <stdint.h>

inline uint64_t as_nanoseconds(struct timespec* ts) {
return ts->tv_sec * (uint64_t)1000000000L + ts->tv_nsec;
}

int main() {
struct timespec start, stop;
uint64_t accu_nsec = 0;

for (...) {
// record start
// perform some logic
// record stop

accu_nsec += as_nanoseconds(&stop) - as_nanoseconds(&start);
} // end for loop
}

关于c - 如何实现 timespec 累加器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24389546/

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