VB vbRC5Base, cPhysicsEngine ,高精度定时器

时间:2021-10-29 20:23:51
因为处理串口数据有实时性要求 所以对定时器要求很高,至少毫秒级吧,VB Timer控件类似的问题在于,在界面上操作以及一些其他延迟因素会导致 Timer控件事件延迟很久才会出来,本来设想使用多媒体API写一个,只是那东西似乎不安全,当然现在主要使用 vbRC5Base库来写,但是发现里面的 cTimer 和 VB Timer 一样有问题,头疼了 ,CCRPTimer当然可以用,只是不想用那个了

然后搜索 vbRC5Base例子,觉得里面应该有高精度定时器? 反正是没找到 ,到是找到 cPhysicsEngine 这个东西,应该是个动画引擎之类的东西吧,不是很熟悉,只是一个例子里那这东西 ,当做一个时间事件使用,突然觉得脑洞满满,这样也可以? 实验了下这东西不能设置时间间隔,我想这个不是什么大问题,可以自己加延迟么。似乎这个也没有重入问题,使用好简单,就是这么个用法?有问题? 觉得好晕 有人这么用过么?

那例子中:
'从这个例子中,我们使用只有其定时-事件 (没有真正的物理这里在此演示中)
'from this instance, we use only its nice Timing-Events (no real Physics here in this Demo)
Set PhTimer = New cPhysicsEngine 

PhTimer.StartSimulation ‘启动’
PhTimer.StopSimulation “停止”

Private Sub PhTimer_RenderUpdatedScene(ByVal dT As Double, ByVal FPS As Double)
....................
end  sub

6 个解决方案

#1


测试这东西一次周期 大致 1.6ms

#2


用 OnComm 事件驱动方式,实时性更好一些。最好不用定时器,不仅无通讯时开销大,而且实时性也很难保证。

#3


串口通讯底层有缓冲区啊,它自己会实现“毫秒级”的通讯。
你的程序通过MSComm等控件进行通讯,是事件驱动的,是异步的。
如果真有“毫秒级”的同步要求,多任务操作系统(Windows)根本不合适,得用单片机才行。

#4


引用 2 楼 of123 的回复:
用 OnComm 事件驱动方式,实时性更好一些。最好不用定时器,不仅无通讯时开销大,而且实时性也很难保证。


OnComm 可以实现Timer 吗?

#5


引用 4 楼 Bobogg 的回复:
Quote: 引用 2 楼 of123 的回复:

用 OnComm 事件驱动方式,实时性更好一些。最好不用定时器,不仅无通讯时开销大,而且实时性也很难保证。


OnComm 可以实现Timer 吗?



我看错 sorry 不用里我

#6


Windows系统计时精度≈15ms

#1


测试这东西一次周期 大致 1.6ms

#2


用 OnComm 事件驱动方式,实时性更好一些。最好不用定时器,不仅无通讯时开销大,而且实时性也很难保证。

#3


串口通讯底层有缓冲区啊,它自己会实现“毫秒级”的通讯。
你的程序通过MSComm等控件进行通讯,是事件驱动的,是异步的。
如果真有“毫秒级”的同步要求,多任务操作系统(Windows)根本不合适,得用单片机才行。

#4


引用 2 楼 of123 的回复:
用 OnComm 事件驱动方式,实时性更好一些。最好不用定时器,不仅无通讯时开销大,而且实时性也很难保证。


OnComm 可以实现Timer 吗?

#5


引用 4 楼 Bobogg 的回复:
Quote: 引用 2 楼 of123 的回复:

用 OnComm 事件驱动方式,实时性更好一些。最好不用定时器,不仅无通讯时开销大,而且实时性也很难保证。


OnComm 可以实现Timer 吗?



我看错 sorry 不用里我

#6


Windows系统计时精度≈15ms