DoEvents语句出现"溢出堆栈空间"的问题
我在做接收由单片机通过串口发送数据的程序
自己定义了延时函数如下 因为接收的数据不是定长的
所以设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件
问题就出来了 在接收的数据过多时候超过2W个字节 程序就会在
⑴这里出错 提示溢出堆栈空间 请高手帮忙 ( ⑵ 那里的延时不能去掉 )
Sub TimeDelay(DT As Long)
Dim t As Long
t = GetTickCount()
Do
DoEvents ..........................出错的地方.............. ⑴
Loop Until GetTickCount - t > DT
End Sub
Dim buffer As Variant
Dim Receive() As Byte
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvRing
Case comEvReceive
TimeDelay (200) .................................⑵
buffer = MSComm1.Input
BytesReceived() = buffer
.........处理数据过程......
End Select
End Sub
[解决办法]
同时被调用的TimeDelay函数次数太多了, 造成堆栈溢出。
个人认为在comEvReceive事件中的延时没有必要,你应该把每次接收到的数据进行缓存,然后判断缓存了的数据是否已经足够进行处理。
[解决办法]
Dim buffer As Variant
Dim Receive() As Byte
Private Sub Timer1_Timer()
buffer = MSComm1.Input
BytesReceived() = buffer
'.........处理数据过程......
End Sub
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvRing
Case comEvReceive
Timer1.Enabled = False
Timer1.Interval = 200
Timer1.Enabled = True
End Select
End Sub
[解决办法]
换用系统timer做的delay函数试试
sub delay(delaytime as single)
dim start
start=timer
do while timer <start+delaytime
doevents
loop
end sub