想监测mscomm如果30秒收不到信息的话弹出对话框,请问应该怎样实现。

zhangwh6882 2002-08-28 10:41:35
如题
...全文
11 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zhangwh6882 2002-08-29
好的,我试一下,多谢你了huxiangming(老虎)
回复
huxiangming 2002-08-29
DoEvents不是延时,是交控制权。一般可以放在你执行耗时最厉害的循环里。循环每兜一次执行一下这语句。

回复
zhangwh6882 2002-08-29
但我的程序是用oncomm接收的,一时也没有办法去改了,以后我会尝试采用你的方法的。
那么怎样加延时呢,是不是不加延时就不能把控制权交给其它事件,延时应该设为多少呢?麻烦了
回复
huxiangming 2002-08-29
循环里加DoEvents主要是将控制权让出,这样其他事件才可以使用。

其实通信里的数据处理我习惯放在Timer里处理的。

Private Sub tmrReceive_Timer()

If MSComm1.InBufferCount Then
Buffer = MSComm1.Input
For i% = LBound(Buffer) To UBound(Buffer)
tmpReceive = tmpReceive & Hex(Buffer(i%)) & " "
Next i%
End If

End Sub
这样一次可以读比较多的数据,处理也方便。
回复
zhangwh6882 2002-08-29
但是我需要将mscomm收到的信息进行处理存入到数据库中呀,我也很苦恼oncomm中语句太多,我没什么经验,请问有没有更好的处理办法。还有在循环里加DoEvents要怎样加呀,我知道发送信息的时候有时要加延时,接受的时候如果加的话不是更慢了么?
回复
huxiangming 2002-08-29
你的oncomm里有太多的循环处理操作了吧?在循环里加上DoEvents 就可以了。
不过我要提醒你oncomm里的工作不要太多。
回复
zhangwh6882 2002-08-29
huxiangming(老虎) :但是在监测mscomm_oncomm时可以把控制权交给timer()么?我刚才试了一下好象不太好用
回复
huxiangming 2002-08-29
用定时器是比较理想的方法,简单的判别不会耽误多少时间的,可以这样考虑。定时器就做加1处理和判别,清这个计数可以在MSComm1_OnComm里。如果实在怕数据丢失的话可以加大MSComm1.InBufferSize的量。
回复
zhangwh6882 2002-08-28
我试了一下,由于我的程序还得检测,MSComm1_OnComm()对收到的信息进行处理,不能把控制权交给Timer_Timer()中,所以这个方法好象没办法实现.请大家帮帮我!
回复
zhangwh6882 2002-08-28
还有每一秒检测有没有可能会受到信息但恰好没有监测到的可能呀
回复
zhangwh6882 2002-08-28
junglerover(灌木丛) 先谢谢你的帮助,你的方法能实现这个功能。但我想问问还有没有其他的方法了,最好是可以不用timer控件。因为我的街面上已经有两个timer控件了,在增加的话很不容易控制。
回复
junglerover 2002-08-28
用一个窗体级变量做计数器;

再使用TIMER控件,每秒监视MSCOMM的INBUFFERCOUNT属性一次;
如果发现等于0,则计数器 + 1 ;反之,计数器清零。

如果计数器达到30,则弹出对话框。
回复
发帖
VB基础类
创建于2007-09-28

7476

社区成员

VB 基础类
申请成为版主
帖子事件
创建了帖子
2002-08-28 10:41
社区公告
暂无公告