搜索
bottom↓
回复: 6

delphi 中 while..do 语句不能等待吗?

[复制链接]

出0入0汤圆

发表于 2009-9-8 21:45:40 | 显示全部楼层 |阅读模式
我用SPCOMM接收3组数据,分别在在LAB1,LAB2.LAB3.上显示。我的思路是发送第一个命令,等SPCOMM接收完成中断,在LAB1上显示,接着发第二个命令,显示在LAB2上。  我在接收中断里放置一个变量作为标记“i",接收完成置1.在发送函数里  
while i =1 do   //等待 i = 1;
begin
i = 0;
end;

调试时发现并未在 while  i = 1 do 上等待,而是跳过继续发送。而此时的 i 是为 0 的。

补充: 上面的搞错了,应该是 while i = 0 do
                            begin
                            end;    是可以等待的。不过都死等在这里了。SPCOMM接收不是中断的。不能处理数据。想想用定时去发送接收比较好。

2.大家在接收多组数据分别显示时,是什么思路呢?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2009-9-9 12:21:28 | 显示全部楼层
kaka

出0入0汤圆

发表于 2009-10-12 01:40:41 | 显示全部楼层
现在面向对象编程不再使用死循环了,那样资源损失太大,如果非要用,那就得用多线程,不然你的界面就死掉了。你需要使用 SPCOMM 类中的事件才行。我不知道你的SPCOMM是什么类,如果能找到这个类的合适的事件,你的程序将会很轻松。

出0入0汤圆

发表于 2009-10-12 08:08:52 | 显示全部楼层
SPCOM有一个OnReceiveData事件是接收数据用的。

出0入0汤圆

发表于 2009-10-12 08:35:56 | 显示全部楼层
while i = 0 do  
begin
...
application.processmessage; //少了这个~原理就自己看VCL和Win32机制
end;

出0入0汤圆

发表于 2009-10-12 08:44:37 | 显示全部楼层
如2楼所说。不能用死循环等待,用事件函数操作。SPCOMM等已经做了线程上的轮询,所以不需要你做了,你要做的仅仅是解析指令而已。

出0入0汤圆

发表于 2009-10-12 17:16:51 | 显示全部楼层
application.processmessage,这个在等待中能释放一些资源,但是效果不明显。用事件驱动才是比较理想的方法。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 14:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表