c# 如何实现高精度轮询?

vincezhao1986 2017-12-26 05:33:12
C#代码中使用线程如何实现一个高精度的轮询?
要求:
1).每0.1毫秒轮询一次。
2).程序运行过程中CPU不能有明显的消耗(低于5%)。

其他:
1).可以使用能够被C#调用的其他语言。
2).请大神们看清要求,给出真实、有效且合理的思路、方案或代码。

急求~3Q!
...全文
1311 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
橘子皮... 2019-03-12
  • 打赏
  • 举报
回复
最高就2-3ms了,再高不太可能了
秋的红果实 2019-03-12
  • 打赏
  • 举报
回复
2).程序运行过程中CPU不能有明显的消耗(低于5%)。 ==> 不要开线程了,直接交给主线程 换Linux系统试一下
wuxiaoluo 2019-03-12
  • 打赏
  • 举报
回复 1
只能用没系统的单片机,利用定时器来轮询,收发信号。存储在内存中,然后透过串口或usb发送到电脑程序处理。
电脑也可以把需要轮询发送的内容透过串口和usb发送到单片机,让单片机去干活。
单片机的晶振还要选好的。否则误差会很大。准确度高的晶振贵些。
还有就是如果信息透过网络收发会延时的,信息经过交换机和路由都会延迟,所以会不准。直接数据线访问。
windows是非实时系统,由系统统一调度每一个线程分配cpu时间,100us时间片太小了,估计需要非常懂系统,深入内核和系统硬件驱动层才能做到了。
小灰狼 2017-12-28
  • 打赏
  • 举报
回复
看标题就觉得不可能了 C#是高级语言,它写的程序是运行在操作系统下的,并且还是操作系统下的虚拟机上的,线程调度由操作系统和虚拟机来决定。而你的操作系统是一个多任务系统,除了你的程序之外,还有老多老多不晓得什么功能的进程在运行,它们也要占用CPU时间,由操作系统调度执行,而那些个杂七杂八的进程到底执行多长时间,谁都无法准确预料(当然预料到了你也没办法)。 真要想达到精确轮询,可以使用单片机,并且是没有操作系统的那种单片机。当然啦,使用单片机的话,如果要把轮询结果存数据库,或者通过串口/网口,又要考虑那些主机是否及时响应,从而干扰到你下一次轮询的时间周期问题了。
tonysungood000 2017-12-27
  • 打赏
  • 举报
回复
稳定的高精度定时或心跳一般需:
1.硬件条件:负载能力超强且稳定;高精度的心跳能力;调度平衡;处理能力要强。---市场上常见的计算机不要奢求了!
2.软件环境要求:多任务,分布式系统,对调度能力要求比较高,一般需对系统进行专门优化。微软的系统不是为这种高精度、实时性任务设计的!
3.程序负载:程序负载不能过大,不要考虑复杂任务应用。C#语言不是为这种需求开发的。

建议:
1.单片机[要能够高速存取,不要奢望能实时显示(显示屏的刷新频率达不到!)]
2.工控机[这需要技术及银子的]

希望对你有帮助
绿领巾童鞋 2017-12-27
  • 打赏
  • 举报
回复
你这个问题跟dotnet根本没有关系,你用java或者别的,在应用层 面上都是 没有太好的方法,如果自己做个单片机或者弄套硬件 那就另外看了。
拜一刀 2017-12-27
  • 打赏
  • 举报
回复
我是来看笑话的
  • 打赏
  • 举报
回复
引用 9 楼 xuzuning 的回复:
0.1ms 就是 100 微秒了,这是个相当宽裕的时间片 你翻阅一下 80 年代讲解操作系统的教科书,就可知道:典型的时分多路操作系统(Unix)中,每个进程每次获取的时间片段也就是 100 微秒 满足条件2,比较困难!5% 表示每个任务都要在 5微秒内完成。但并没有说执行什么任务
有钱任性的话可以上超算,我觉得应该能实现不超过5%,超了就再加cpu阵列。
正怒月神 2017-12-27
  • 打赏
  • 举报
回复
什么需求,从需求分析1
五更琉璃 2017-12-27
  • 打赏
  • 举报
回复
也不是 毫无办法,准确定时 可以用PC 外接设备带晶振的,
fd34gs3yf 2017-12-27
  • 打赏
  • 举报
回复
赶紧结贴吧,在非实时系统上,一切挣扎都是徒劳的
  • 打赏
  • 举报
回复
好久之前看过一篇文章高精度定时器实现换个语言换个系统吧,用windows系统你能做到0.1ms算我服
twtyypmb123 2017-12-27
  • 打赏
  • 举报
回复
直接应用硬件中断,这个应该是比较准确的了,C#如何具体操作不知,可以用C语言封装,然后C#传委托过去
xuzuning 2017-12-26
  • 打赏
  • 举报
回复
0.1ms 就是 100 微秒了,这是个相当宽裕的时间片 你翻阅一下 80 年代讲解操作系统的教科书,就可知道:典型的时分多路操作系统(Unix)中,每个进程每次获取的时间片段也就是 100 微秒 满足条件2,比较困难!5% 表示每个任务都要在 5微秒内完成。但并没有说执行什么任务
吹风的兔子 2017-12-26
  • 打赏
  • 举报
回复
> 线程休眠 —— 听说误差最大。 > 三个Timer 时钟心跳 —— 听说误差也有。 > 还有个 自旋 延迟 —— 最耗性能。 其实 0.1 毫秒 都不是个事儿,每秒钟 执行 10000 次 而已 —— 能将就的话,就用 Timer 吧,或许会有 0.001 毫秒的误差。
fd34gs3yf 2017-12-26
  • 打赏
  • 举报
回复
先补一下计算机常识:实时操作系统
引用 5 楼 vincezhao1986 的回复:
[quote=引用 4 楼 qq_20802829 的回复:] 0.1毫秒 ???
对的,你没看错!是不是1ms是十分之一毫秒![/quote] 先补一下计算机常识,就不会这么理直气壮的无知了,操作系统:实时操作系统 分时操作系统
  • 打赏
  • 举报
回复
就算宽容100被也不可能,这是对桌面 windows 系统完全不了解。你的这个,并不适合使用 windows。还是换别的系统用吧。
vincezhao1986 2017-12-26
  • 打赏
  • 举报
回复
引用 4 楼 qq_20802829 的回复:
0.1毫秒 ???
对的,你没看错!是不是1ms是十分之一毫秒!
DF-SKy 2017-12-26
  • 打赏
  • 举报
回复
0.1毫秒 ???
vincezhao1986 2017-12-26
  • 打赏
  • 举报
回复
引用 2 楼 huangcailian 的回复:
你线程执行的过程能在0.1毫秒完成不?
先不考虑过程消耗的时间。
加载更多回复(2)

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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