usleep() 计算经过的时间表现得很奇怪

2023-12-02

我使用下面的代码计算每次连续调用处理程序函数所花费的时间(以毫秒为单位)。当我使用 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;
    }

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

你必须使用tv_sec字段也在您的计算中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

usleep() 计算经过的时间表现得很奇怪 的相关文章

随机推荐