读写串口时出现假死现象,过一分钟左右后程序又恢复运行。这个是为什么?谢谢
例子是在form窗体里有一个timer控件,和mscomm1控件用于读取端口数据。在读写串口时出现假死现象,过一分钟左右后程序又恢复运行。这个是为什么?谢谢
Private Sub Timer1_Timer()
timer1.enable=false
Do While (1)
读写串口
显示数据
doevents
loop
End Sub 读,写串口最好不要用循环,而是一句一句处理,其实你用timer控件的目的不就是定时去读,写嘛. 代码过于简单,无法提供意见.
LS的意见可能是原因之一. 楼主的代码肯定有问题,不应该把读写命令都放在循环中,这样会造成一条读命令的值还没有返回你又发一条读命令了。你应该发送一条读命令,等待一会儿,读取返回值。然后下一个Timer循环中重复这个操作。 本帖最后由 bcrun 于 2011-12-23 15:30:18 编辑 经过监控 发现每次假死都是停留在一下代码段中
nTime = GetTickCount
Do While GetTickCount - nTime < 300
If MSComm1.InBufferCount = 5 Then
Exit Do
End If
DoEvents
Loop 你完全没有理解我的意思,请你再看看我的回复。 读串口数据是有时间的, 这个时间取决于你要读取的数据多少以及通讯速率,也就是串口波特率.
所以最好还是以中断事件的方式去读数据,而不是你现在采用的类似"轮讯"的方式不停反复读取.
看不明白你说什么 以上函数就是发送完毕一次,等待返回。 你希望在300毫秒内读取数据,这种定时方式是不可取的,不准确.建议使用ONCOMM事件来触发,或者在这个函数里就是发送,然后启动第二个TIMER,延时为300毫秒,进行读取数据
补充:VB , 基础类