c - usleep() 计算耗时表现得很奇怪

标签 c gettimeofday usleep

我使用下面的代码计算每次连续调用处理程序函数所花费的时间(以毫秒为单位)。当我使用 usleep(1000) 时,即每次调用之间的 1 毫秒时间差为 10 毫秒,而当我使用 usleep(1000000) 时,即 1 秒,每次调用之间的时间间隔令人惊讶地下降到小于 1 毫秒。以下是代码片段:

    #include<stdio.h>
    #include<stdlib.h>
    #include<sys/time.h>
    #include<unistd.h>

    struct timeval start_time;
    void handler(int);

    int main()
    {
            struct timeval current_time;
            int i=0;
            gettimeofday(&start_time,0);
            gettimeofday(&current_time,0);
            printf("%012.3fms: emulationbegins\n",((current_time.tv_usec-start_time.tv_usec)/1000.0));

            while(i++<5)
            {
                    usleep(1000); // compare with usleep(1000000)
                    handler(i);
            }

            return 0;
    }

    void handler(int i)
    {
            printf("In Handler %d\n",i);
            struct timeval current_time;
            gettimeofday(&current_time,0);
            printf("%012.3fms: Handler Called\n",((current_time.tv_usec-start_time.tv_usec)/1000.0));
            return;
    }

最佳答案

请记住,timeval 结构的 tv_usec 字段永远不会达到(或超过)一百万,而是增加秒数。

您还必须在计算中使用 tv_sec 字段。

关于c - usleep() 计算耗时表现得很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14852434/

相关文章:

C: gettimeofday() 每次运行产生相同的值

c - 为什么 gettimeofday 返回奇怪的 tv_sec?

c - C 中的 -mno-sse 标志和 gettimeofday() 出错

c - 如何处理 poll() 而不降低服务器速度或浪费 cpu?

c++ - 我是否正确使用了 usleep 还是这是一个错误?

c++ - 匹配的 SIFT 关键点的坐标

c - 如何获取与终端关联的 session 的 session ID?

ios - usleep 在 iOS 中不起作用

编译器不处理 freertos #define 代码

c++ - 为什么 `int >> 32` 不总是零?