如何保证程序是时间间隔一致?
vb.net吧
全部回复
仅看楼主
level 1
蓝梦妖蝶 楼主
做一个上位机程序。
每隔10ms读一次数。然后经过很复杂的运算,把结果打印出来。
现在问题是
1,算的速度不一致,有时快有时慢
2,随着数据增多,速度变的是越来越慢
代码:
开了一个线程,线程函数:
Private Sub FindPD()
‘一些初值设置
COM_SEND_data("F00100")
COM_SEND_data("F00753")
Do
COM_SEND_data("FB01")
Threading.Thread.Sleep(1)
COM_SEND_data("FB10")
Dim set0_in0_str As String = ""
Dim set1_in0_str As String = ""
Dim set0_in1_str As String = ""
Dim set1_in1_str As String = ""
If GN_ChkCOM.Checked Then
If GN_ChkIIC.Checked Then 'E0 mod
Else
If PI_chkMCU.Checked Then
Dim seloffset_str_list() As Integer = USB_readFast("FD", "04", 10)
For i = 0 To 7
offset_str(i) = DecToHex(seloffset_str_list(i), 2)
Next
Else
COM_SEND_data("F00107")
Dim seloffset_str_list() As Integer = USB_readFast("F2", "30", 10)
For i = 0 To 7
offset_str(i) = DecToHex(seloffset_str_list(i), 2)
Next
End If
End If
End If
seloffset = StrToDou64_test(offset_str)‘复杂计算’
Dim m_real As Double = GN_m_RX / 2 ^ 28
seloffset = (seloffset * (GN_divin_RX / GN_fin_RX) / m_real) * 10 ^ 3
If maxpd < seloffset Or maxpd = 0 Then
maxpd = seloffset
End If
If minpd > seloffset Or minpd = 0 Then
minpd = seloffset
End If
PI_txtOS_max.Text = maxpd
PI_txtOS_min.Text = minpd
GN_txtResultStr.Text = GN_txtResultStr.Text & Math.Round(seloffset, 6).ToString() + vbCrLf '会越来越慢
Dim time As Int16 = Val(PI_txtOStime.Text)
If time > 6 Then
Threading.Thread.Sleep(time - 5)
ElseIf time < 6 Then
MsgBox("the time interval must >6ms!")
Exit Sub
End If
Loop
End Sub
2019年02月28日 07点02分 1
level 1
蓝梦妖蝶 楼主
一次程序我示波器量了是5ms。所以我算延迟上是减去该值。
如延迟10ms。则delay(10-5)以满足第一个上升沿的间隔一致。
2019年02月28日 07点02分 2
level 1
蓝梦妖蝶 楼主
改成listbox,不会像以前那样越来越大了。
但是时间还是10ms和11ms来回变。不太稳定。有时还会出现更长如20ms的
如何保证每次都是10ms呢?
2019年02月28日 08点02分 3
level 1
蓝梦妖蝶 楼主
现在是这样。本来应该是连续的,但是不知道为什么会断一段。稳定的间隔也是10ms 11ms这样不稳定
2019年02月28日 08点02分 4
level 1
蓝梦妖蝶 楼主
从USB上看。STM32已经及时发了数据,但是软件并没有反应过来。等了一会才进入下一条语句。不知道是哪里阻塞了。
2019年03月01日 02点03分 5
level 1
蓝梦妖蝶 楼主
知道了,原因是线程被占用。会占用50ms。现在改用下位机定时上报的模式。
2019年03月01日 03点03分 6
level 13
我看到你另一个帖子里面说新开一个线程解决这种问题。其实这不是合适的方案。频繁地创建线程的性能不如用线程池。其次,如果开了很多线程还是处理不过来,你可以利用一下其它闲置的电脑的计算资源。用 WCF 或者 Remoting 命令别的电脑做一些耗时的工作。处理串口通信的电脑只是分发任务。
2019年03月02日 04点03分 7
1