读书人

DoEvents语句出现quot;溢出堆栈空间quot;的有关

发布时间: 2012-01-21 21:31:43 作者: rapoo

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

读书人网 >VB

热点推荐