C++ 11有没有提供微秒级别的定时器?

iuruteiu 2014-04-22 11:33:45
加精
不是Sleep噢,是想要定时器,能设置回调的那种。微秒级别。
...全文
8662 61 打赏 收藏 转发到动态 举报
写回复
用AI写文章
61 条回复
切换为时间正序
请发表友善的回复…
发表回复
列子汤问 2016-04-05
  • 打赏
  • 举报
回复
要用底层函数的。
paschen 版主 2015-10-14
  • 打赏
  • 举报
回复
mLee79 2015-10-14
  • 打赏
  • 举报
回复 1
如果一个误差有好几毫秒的定时器也算是微秒级别的话, 确实是可以做到的..
欧阳春晖 2015-09-28
  • 打赏
  • 举报
回复
引用 56 楼 xiayadong 的回复:
[quote=引用 21 楼 iuruteiu 的回复:] 估计毫秒已经是最小级别了,不能再进入微秒级别了,估计是受限于线程的时间片吧。
正解! 操作系统最小时间片是10ms吧 没有微秒级的定时器 操作系统的时间片决定了程序写也写不出微秒级的 使用单片机可以实现 [/quote] 微秒级别谁说做不到的?只不过微秒级别的计时比较麻烦而已,比较pc上的系统不是实时系统
欧阳春晖 2015-09-28
  • 打赏
  • 举报
回复
操作系统有,windows的高精度定时器,linux的自己查吧
lucky-lucky 2015-09-28
  • 打赏
  • 举报
回复
定时器的准确率与操作系统的实时性相关性很大,下面代码为Linux中实现纳秒级定时器的代码

    struct itimerspec its;

    /*设置定时器*/
    its.it_value.tv_sec = TIMER_CYCLE_NANO / NANO_ONE_SECOND;
    its.it_value.tv_nsec = TIMER_CYCLE_NANO % NANO_ONE_SECOND;
    its.it_interval.tv_sec = its.it_value.tv_sec;
    its.it_interval.tv_nsec = its.it_value.tv_nsec;
    if (-1 == timer_settime(timerid, 0, &its, NULL))
    {
        printf("设置定时器失败\n");

        return -1;
    }
xiayadong 2015-09-24
  • 打赏
  • 举报
回复
引用 21 楼 iuruteiu 的回复:
估计毫秒已经是最小级别了,不能再进入微秒级别了,估计是受限于线程的时间片吧。
正解! 操作系统最小时间片是10ms吧 没有微秒级的定时器 操作系统的时间片决定了程序写也写不出微秒级的 使用单片机可以实现
图灵转世 2015-09-21
  • 打赏
  • 举报
回复
汇编里有的,网上查一下。
其实也罢 2015-09-21
  • 打赏
  • 举报
回复
我做过运营级定时器,自己写的,要求并发多重定时器,精度1毫秒。但实际上用起来稍微差一点点根本就没啥区别。 还有硬件时钟的精度问题,现在的CPU都支持TSC和constant_TSC了,精度非常高,有小于1纳秒的,也不受到CPU休眠的影响,也与实时操作系统这些没关系。linux里面看clock_source就知道,即使没有TSC也有HPET做时钟源,硬件时钟也能达到10纳秒以下的精度。
tingtings324 2015-09-19
  • 打赏
  • 举报
回复
select 吧
额为俄武器 2015-09-17
  • 打赏
  • 举报
回复
好多吧 ,自己差吧
bigbaldy 2015-09-16
  • 打赏
  • 举报
回复
windows一样也有纳秒级的,例如KeDelayExecutionThread
zhenbancai 2015-09-16
  • 打赏
  • 举报
回复
不错的啊。。。。。。
jbz001 2015-09-16
  • 打赏
  • 举报
回复
我有个方法楼主可以试试
写一个循环,不停地获取CPU时间,这个好像可以精确到纳秒。
不加睡眠的语句,然后判断时间是否到达。
不过这个可能误差非常大。
另外获取到的CPU时间包括内核时间,用户时间,空闲时间,需要自己计算总的时间。
获取CPU时间的方法我忘了,自己查吧。
jbz001 2015-09-16
  • 打赏
  • 举报
回复
我有个方法楼主可以试试
写一个循环,不停地获取CPU时间,这个好像可以精确到纳秒。
然后判断时间是否到达。
不过这个可能误差非常大。
另外获取到的CPU时间包括内核时间,用户时间,空闲时间,需要自己计算总的时间。
获取CPU时间的方法我忘了,自己查吧。
赵4老师 2015-09-15
  • 打赏
  • 举报
回复
神州飞船控制系统提供了。我猜。
mLee79 2015-09-15
  • 打赏
  • 举报
回复
VxWorks 也没这精度, 它的精度也只到一个时钟中断, 一般是 1毫秒或者 10毫秒 ..
  • 打赏
  • 举报
回复
这个不是语言问题,就算实时系统很多都无法做到。你可以看看VxWorks是否能提供这么高精度的定时器。 另外这么短的时间,你还必须保证你的代码足够短,不然定时器里执行超时又会影响精度。
飞翔的峰 2015-09-15
  • 打赏
  • 举报
回复
这个要牵扯到操作系统级别的东西,linux系统在驱动层可以提供纳秒级别的定时器,成为高精度定时器
eziowayne 2015-09-15
  • 打赏
  • 举报
回复
select
加载更多回复(41)

64,666

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧