当电脑有干扰时,VB6.0 的串口通讯程序会占用100%的CPU 。

VB编的一个程序,和一个仪器(可以输出电压的仪器)进行串口通讯。
这个仪器输出的电压小于200V时,VB.EXE运行一点问题都没有,但是当仪器电压到大概400V时,电脑屏幕有明显雪花,这时很容易死机,通过资源管理器发现是这个VB通讯程序占据了几乎100%的CPU。
这可能是什么原因?如何解决?
下面是两段程序,感觉可能和它们有关。
Sub ZanTing(ByVal sTime As Single) '暂停秒
On Error Resume Next
Dim ShiJian
ShiJian = Timer
Do While 1
DoEvents
If ShiJian + sTime <= Timer Then Exit Do
Loop
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''’‘’
Private Sub MSComm1_OnComm() '''''串口1 返回的数据都先到Text184中
On Error Resume Next
Dim S() As Byte
Dim SS(1024) As Byte
Static N As Long
Static T As Variant
Dim I As Integer

If (MSComm1.CommEvent = comEvReceive) Then
S = MSComm1.Input
If (Timer - T > 0.01) Then
Text184 = ""
N = 0
End If
T = Timer
For I = 0 To UBound(S)
Text184.Text = Text184.Text & Right("0" & Hex(S(I)), 2)
SS(N + I) = S(I)
N = N + UBound(S)
Next I
End If
End Sub
'''''''''''''''''''''''''''''''''''''''说错了,我这里的RThreshold是设置为1,不是0.。

Private Sub Form_Load() ''''''初始化串口
On Error Resume Next
MSComm1.Settings = " 9600,o,8,1"
MSComm1.CommPort = 3
MSComm1.InputMode = comInputModeBinary '采用二进制传输
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
MSComm1.RThreshold = 1 '产生MSComm事件

If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
Else
End If
最新回答
咸鱼味的猫

2024-09-18 00:27:42

RThreshold 属性:在MSComm控件设置CommEvent属性为comEReceive并产生 OnComm 之前,设置并返回的要接收的字符数。
语法:
object.Rthreshold [ = value ](value 整型表达式,说明在产生 OnComm 事件之前要接收的字符数。 )

说明 :当接收字符后,若 Rthreshold 属性设置为 0(缺省值)则不产生 OnComm 事件。例如,设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。
追问
我的水平比较低,没太看懂您的话。只要将Rthreshold设置为3或2就行吗?现在设置的是0。
它和这个干扰时才会导致的CPU占用100%有关系吗?
百度里,有人说在延时程序里加句sleep(1),会降低CPU占用率。在我这会有道理吗?