时间延迟在C. usleep

时间延迟在C. usleep,第1张

概述我正在开发一个用C编写的游戏服务器.我需要开发一个具有一定频率的周期(每秒50次) 执行算法. 问题是我无法暂停程序的精确时间间隔 – 20000微秒. 功能usleep(20000)运行约30000微秒. 结果总是超过预期的10000微秒. 这是我的简单代码示例: #include <stdio.h>#include <time.h>#include <unistd.h>int main 我正在开发一个用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;}

它的运行结果:

$./a.outdelay: 29233delay: 29575delay: 29621delay: 29694delay: 29688delay: 29732delay: 29709delay: 29706delay: 29666delay: 29702delay: 29702delay: 29705delay: 29789delay: 29619delay: 29785delay: 29634delay: 29692delay: 29708delay: 29701delay: 29703

我也尝试使用函数select(),但结果与sleep()相同.

请告诉我,我的代码怎么了?

P.S:

$uname -aFreeBSD home.com 9.0-RELEASE FreeBSD 9.0-RELEASE #0: Tue Jan  3 07:46:30 UTC 2012     [email protected]:/usr/obj/usr/src/sys/GENERIC  amd64
解决方法 而不是睡觉20000 useconds,休眠的时间,直到你想再次运行,基于对clock_gettime的调用

即:

usleep( lasttime+20000-Now ); // But make sure you don't sleep when the result is negative

这不是你的代码有问题,但实际的睡眠呼叫,阅读时间等需要时间,并且系统无法正常睡眠,除非它是精确时钟周期的倍数

总结

以上是内存溢出为你收集整理的时间延迟在C. usleep全部内容,希望文章能够帮你解决时间延迟在C. usleep所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1234180.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存