18.12 怎样实现精度小于秒的延时或记录用户回应的时间

很不幸, 这没有可移植解决方法。

下面是一些你可以在你的系统中寻找的函数:

clock(), delay(), ftime(), getimeofday(), msleep(), nap(), napms(),nanaosleep(), setitimer(), sleep(), Sleep(), times() 和usleep。

至少在Unix 系统下, 函数wait() 不是你想要的。

函数select() 和poll() (如果存在) 可以用来实现简单的延时。

在MS-DOS 下, 可以重新对系统计时器和计时器中断编程。

这些函数中, 只有clock() 在ANSI 标准中。

两次调用clock() 之间的差分就是执行所用的时间, 如果CLOCKS PER SEC 的值大于1, 你可以得到精确度小于秒的计时。

但是, clock() 返回的是执行程序使用的处理器的时间, 在多任务系统下,有可能和真实的时间相差很多。

如果你需要实现一个延时, 而你只有报告时间的函数可用, 你可以实现一个繁忙等待。

但是这只是在单用户, 单任务系统下可选, 因为这个方法对于其它进程极不友好。

在多任务系统下, 确保你调用函数, 让你的进程在这段时间进入休眠状态。

可用函数sleep(), select() 或poll() 和alarm() 或setitimer()实现。

对于非常短暂的延时, 使用一个空循环颇据有诱惑力:

long int i;

for (i = 0; i < 1000000; ++i)

;

但是请尽量抵制这个诱惑!

因为, 经过你仔细计算的延时循环可能在下个月因为更快的处理器出现而不能正常工作。

更糟糕的是, 一个聪明的编译器可能注意到这个循环什么也没做, 而把它完全优化掉。

永不止步步 发表于01-18 10:06 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:308117个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号