C/C++中如何稳定地每隔5ms执行某个函数?
C/C++中如何稳定地每隔5ms执行某个函数?
-----
网友解答:
-----
分时操作系统里很难做到。linux win的时间片最少5毫秒,你交出去执行权,系统也未必能在5ms内把cpu执行权再还回去,哪里来的稳定执行哦。
-----
网友解答:
-----
这个不是由程序语言决定的,而是由操作系统提供的。不然为什么会有RTOS?另外比较精确控制的是通过硬件中断来实现。你所说的使用sleep函数只是告诉操作系统,把当前进程的cpu控制权交出去,至于5ms之后操作系统能否再调度这个进程,跟操作系统的调度算法和该进程的优先级有关。
-----
网友解答:
-----
轮询检查是否到达5ms,为了减少开销可以每次sleep 1ms,为了保证精度可以少于1ms,但无论怎么做,在现代分时操作系统上都没法精确到5ms,只能尽量接近。不过windows和linux都有实时调度模式,你可以试试。
如果你是在嵌入式上直接裸写的,可以做到更接近5ms,但也达不到绝对精确,嵌入式cpu频率是已知的(可粗略理解为每秒晶振多少次),每条指令的运行需要多少次晶振(也就能算出每条指令的执行时间),也就能几乎精确的控制代码在合何时执行,以及能执行多久。
但这里没有考虑指令和数据从内存储设备load进cpu寄存器的时间,也没有考虑多级cache,以及cache miss时耗费的时间,也没有考虑有指令流水线参与的更复杂的处理器。即便是cpu生产公司,他能告诉你各个子功能的精确耗时,但综合起来以后情况就变得很复杂,也许同一个条代码上一次执行时花10ns,下一次执行也许只用6ns。所以只能提供一个估计的平均耗时以供参考,但不能作为绝对指标。
如果是在有时钟中断提供(无论这个时钟有多精确)的cpu上运行代码,这些指令的执行时间同样受上面的因素影响,所以也只能给个平均时间。
这里还没有考虑数值精度的问题,在不同的表示方法下,以及不同的算术影响下,5ms这个数值的精确度问题。
也没有考虑多任务系统参与下任务调度带来的更多影响因素。
所以最终只能取近似,而不能强求绝对精确。
-----
网友解答:
-----
加个小单片机吧,那玩意准很多,微秒
级都轻松。linux操作系统不行
-----
网友解答:
-----
要稳定5毫秒执行一个函数,首先肯定得保证这个函数平均执行时间少于5毫秒。
否则肯定要系统崩溃。
然后在一个线程循环中,不断获取tickcount,来决定sleep多少毫秒。
-----
网友解答:
-----
要么使用可抢占式的实时操作系统,非实时操作系统的话,可以调整bsp或者grub,将一部分CPU核隔离出来不跑操作系统,将你要定时执行的线程绑到对应CPU核上
-----
网友解答:
-----
PC上是不可能的,或者你自己去改Linux源码?
-----
网友解答:
-----
准确不了 只能大概
-----
网友解答:
-----
用硬件定时中断 linux可以做内核驱动 配置Timer寄存器 注册中断
-----
网友解答:
-----
这要依赖于实时操作系统。
5毫秒且稳定。计数器都忙不过来。
-----
网友解答:
-----
用rtos
------------------
推荐阅读:
终于有一部良心国产剧!《警察荣誉》评分凭什么从7.7涨到8.6?
上一篇:大众迈腾怎么样?
下一篇: 金陵十二钗正册都有谁?