当前位置:编程学习 > VB >>

读写串口时出现假死现象,过一分钟左右后程序又恢复运行。这个是为什么?谢谢



例子是在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 你完全没有理解我的意思,请你再看看我的回复。 读串口数据是有时间的, 这个时间取决于你要读取的数据多少以及通讯速率,也就是串口波特率.
所以最好还是以中断事件的方式去读数据,而不是你现在采用的类似"轮讯"的方式不停反复读取.
引用 6 楼 veron_04 的回复:
你完全没有理解我的意思,请你再看看我的回复。


看不明白你说什么 以上函数就是发送完毕一次,等待返回。 你希望在300毫秒内读取数据,这种定时方式是不可取的,不准确.建议使用ONCOMM事件来触发,或者在这个函数里就是发送,然后启动第二个TIMER,延时为300毫秒,进行读取数据
补充:VB ,  基础类
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,