读书人

Application.ProcessMessages有关问题

发布时间: 2012-08-17 02:08:34 作者: rapoo

Application.ProcessMessages问题
procedure TForm1.ContClick(Sender: TObject);
//continuouscapture =0 表示停止连续采集
//continuouscapture =1 表示开始连续采集
begin
continuouscapture := 1 -continuouscapture;
while(continuouscapture=1) do
begin
acquaireimg.OnClick(sender); // 采集数据的操作
Application.ProcessMessages;
end;
end;

我希望可以在ContClick事件发生后,转换接收的状态。程序是上面的,可以实现转换,但是问题是偶尔(比如经过2~3次转换)程序就会跑死,不知道是什么原因,请大家帮忙!

[解决办法]
是不是acquaireimg.OnClick中死循环了
[解决办法]
acquaireimg.OnClick(sender); // 采集数据的操作
这个或许应该放在里面吧Application.ProcessMessages;

[解决办法]
continuouscapture 这个值你在哪儿改变的?

如果只是0,1,为什么不用 Boolean变量?

实在看不懂你这个编程出发点。如果要定时触发,有TTimer()可用。不论是自动或是手动,Timer都能实现你要的效果。

不知道你的数据采集操作是不是有应答等待,这样的处理一定要有超时处理。

如果你是操作串口,多次重复操作如果没有超时处理,肯定会死锁的
[解决办法]
acquaireimg.OnClick(sender);

这里头的代码可以加上
sleep(10);
Application.ProcessMessage;

放在外头,相当于要等待 OnClick 之后,才会释放一次控制权。不过比较好的解决方案还是用多线程。

读书人网 >.NET

热点推荐