- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我输出 gettimeofday()
的微秒字段时,我注意到微秒字段大于 1,000,000。有人知道为什么吗?这是否意味着我对 gettimeofday() 的解释是错误的?
郑重声明,我的假设是,根据 gettimeofday()
的当前时间(以微秒为单位)如下:
struct timeval ts;
gettimeofday(&ts, NULL);
printf("%zu", ts.tv_sec * 1000000 + ts.tv_usec);
编辑:这是导致问题的代码。在下面的注释之后, printf() 可能有问题。
struct timeval curr_time;
gettimeofday(&curr_time, NULL);
printf("Done-arino! Onto the matrix multiplication (at %zu s, %03zu ms)\n", curr_time.tv_sec, curr_time.tv_usec);
// Matrix Multiplication
struct timeval start_tv, end_tv, elapsed_tv;
gettimeofday(&start_tv, NULL);
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
for (k = 0; k < N; k++)
C[i][j] += A[i][k] * B[k][j];
gettimeofday(&end_tv, NULL);
timersub(&end_tv, &start_tv, &elapsed_tv);
// Print results
printf("Elapsed time: %zu s, %03zu ms\n", elapsed_tv.tv_sec, elapsed_tv.tv_usec / 1000);
最佳答案
成功gettimeofday
后,是的,tv_usec
保证严格小于1000000。
如果您(认为您)看到的值为 1000000 或更大,那么是的,您可能做错了什么。
一个常见的错误是天真地添加或减去两个 struct timeval
值,而没有在 tv_sec
和 tv_usec
字段之间实现适当的进位或借位,这很容易导致(错误的)tv_usec
中的值大于 1000000。(在您编辑的帖子中,您提到减去时间规范,但您正在使用系统提供的 timersub
应该正确借用的函数。)
如果您使用 struct timespec
而不是 struct timeval
,并且如果正在进行闰秒,并且如果 你(奇迹般地)使用了一个操作系统内核,该内核实现了 Markus Kuhn 在 https://www.cl.cam.ac.uk/~mgk25/posix-clocks.html 中提出的 CLOCK_UTC
时钟类型。 ,您会看到 tv_nsec
值大于 1000000000,但这是很多“if”。 (据我所知,广泛使用的内核还没有实现过 CLOCK_UTC
。)
关于c - gettimeofday() 微秒不限于秒以下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50547661/
我是一名优秀的程序员,十分优秀!