小编And*_*rew的帖子

C. usleep的时间延迟

我正在开发用C编写的游戏服务器.我需要开发一个具有特定频率(每秒50次)的循环来执行算法.问题是我无法暂停程序一段精确的时间间隔 - 20000微秒.函数usleep(20000)运行大约30000微秒.结果总是比预期的10000微秒更多.

这是我的简单代码示例:

#include <stdio.h>
#include <time.h>
#include <unistd.h>

int main( int argc, char ** argv )
{

        const unsigned long long nano = 1000000000;
        unsigned long long t1, t2;

        struct timespec tm;

        for(;;)
        {

                clock_gettime( CLOCK_REALTIME, &tm );
                t1 = tm.tv_nsec + tm.tv_sec * nano;

                usleep( 20000 );

                clock_gettime( CLOCK_REALTIME, &tm );
                t2 = tm.tv_nsec + tm.tv_sec * nano;

                printf( "delay: %ld\n", ( t2 - t1 ) / 1000 );
        }

        return 0;

}
Run Code Online (Sandbox Code Playgroud)

它运行的结果是:

$ …
Run Code Online (Sandbox Code Playgroud)

c timedelay usleep

12
推荐指数
2
解决办法
6万
查看次数

标签 统计

c ×1

timedelay ×1

usleep ×1