关于使用两级 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发出的指令混乱,原意是如果串口在被使用时又有调用就等着上一次使用串口结束后再调用,实现排队的目的。谁知道锁死了,该怎么解决啊?或者有别的方法解决我的问题也行,我就是需要调用串口,而且在第一次调用串口的等待过程中可能第二次又来了,串口只有一个,必须想办法隔开。
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
sub command1_click
static InProc as boolean
if InProc then exit sub
inproc=true
............'处理代码
doevents
..........
inproc=false
end sub
作者: worldy 发布时间: 2011-10-10
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28