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

zhangwh6882 2002-08-28 10:41:35
如题
...全文
42 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
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,则弹出对话框。

7,764

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧