首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

DoEvents语句出现"溢出堆栈空间"的有关问题

2012-01-21 
DoEvents语句出现溢出堆栈空间的问题我在做接收由单片机通过串口发送数据的程序自己定义了延时函数如下

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

热点排行