开发者社区> 问答> 正文

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

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

展开
收起
游客py5kcp7dd6tu6 2022-03-30 07:48:00 530 0
1 条回答
写回答
取消 提交回答
  • 很不幸, 这没有可移植解决方法。下面是一些你可以在你的系统中寻找 的函数: 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)
    ;
    

    但是请尽量抵制这个诱惑!因为, 经过你仔细计算的延时循环可能 在下个月因为更快的处理器出现而不能正常工作。更糟糕的是, 一个聪明的编译器可能注意到这个循环什么也没做, 而把它完全优化 掉。

    2022-03-30 07:48:24
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载