+ -
当前位置:首页 → 问答吧 → 关于使用两级 DoEvents 锁死事件

关于使用两级 DoEvents 锁死事件

时间:2011-10-09

来源:互联网

我在窗体上有一个串口通信   MSCom1   控件用于和外部PLC通讯,   和一个   Command   控件

Command   控件代码如下:

    略
    if   k   then                                     ’判断有没有正在使用串口
            Do
            DoEvents                               ’在等待过程中可以响应别的事件
            Loop   Until   (k=false)       ’直到没有其他在使用串口函数
    end   if
    k=ture                                           ’本轮调用串口开始
    call   函数1                                   ’调用串口函数
    略


函数1代码如下:

  略
      Do
      DoEvents                                     ’等待串口响应,可以执行其他事件
      Loop   Until   (MSComm1.InBufferCount   > =   5)         ’串口响应
      k=false                                       ’本轮调用结束  
  略

蛋疼的事情来了,在单击Command后,程序顺利的走到了函数1里的等待串口响应的循环中,这时,又单击了Command,
因为k为true(前一次串口调用还在执行),所以在do循环里等待前一次执行完。
因为控制权是函数1交出来的,被第二次单击Command得到了,意思就是,如果Command里的过程没执行完,程序不会回到函数1里。但是如果函数1一直不能执行完,k就一直不能变为false,程序就一直停在循环里等待。所以就锁死了……

说明一下,之所以用个k,是怕有两个过程同时调用串口,导致向PLC发出的指令混乱,原意是如果串口在被使用时又有调用就等着上一次使用串口结束后再调用,实现排队的目的。谁知道锁死了,该怎么解决啊?或者有别的方法解决我的问题也行,我就是需要调用串口,而且在第一次调用串口的等待过程中可能第二次又来了,串口只有一个,必须想办法隔开。

作者: shengjiajian   发布时间: 2011-10-09

串口与PLC通信有那么慢么?

作者: qianjin036a   发布时间: 2011-10-10

使用标志,禁止重入
sub command1_click
 static InProc as boolean
 
if InProc then exit sub
inproc=true
............'处理代码
doevents
..........
inproc=false

end sub

作者: worldy   发布时间: 2011-10-10

热门下载

更多