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

串口,DOEVENTS等待回应,关闭系统时出错,该怎么处理

2012-01-21 
串口,DOEVENTS等待回应,关闭系统时出错下面一段串口程序,用MSComm发送出命令后,通过DOEVENTS等待返回消息,

串口,DOEVENTS等待回应,关闭系统时出错
下面一段串口程序,用MSComm发送出命令后,通过DOEVENTS等待返回消息,但是如果这个返回消息没有的话,就一直在等待,到系统关闭时也是没返回消息的时候,就会报错,请问怎么在系统关闭的时候,关闭这个doevents让它不报错呢.


MSComm1.Output = "#01" & Chr$(13)
' Wait for data to come back to the serial port.
Do
DoEvents
Buffer$ = Buffer$ & MSComm1.Input
Loop Until InStr(Buffer$, vbCr)


[解决办法]

设置一个超时,简单的如

Dim sngTimeOut As Single
' Wait for data to come back to the serial port. 
sngTimeOut = Timer + 0.5
Do 
DoEvents 
Buffer$ = Buffer$ & MSComm1.Input
If Timer > sngTimeOut Then Exit Do 
Loop Until InStr(Buffer$, vbCr)

注意,上面的超时不支持跨午夜。
[解决办法]
可以用定时器,或者把这个等待操作放到一个thread中,结束的时候,ExitThread退出线程,然后退出主进程
[解决办法]

探讨
谢谢of123的提示,我试了,可以
还有,有没有其他的函数可以不受timer跨午夜的限制呢
用datediff可以,不过,只能精确到秒,好像不能到微秒级别的吧
不知道哪个可以

[解决办法]
引用楼主 esunhrh 的帖子:
下面一段串口程序,用MSComm发送出命令后,通过DOEVENTS等待返回消息,但是如果这个返回消息没有的话,就一直在等待,到系统关闭时也是没返回消息的时候,就会报错,请问怎么在系统关闭的时候,关闭这个doevents让它不报错呢.


MSComm1.Output = "#01" & Chr$(13)
' Wait for data to come back to the serial port.
Do
DoEvents
Buffer$ = Buffer$ & MSComm1.Input
Loop Until InStr(Buffer$, vbCr)

热点排行