问题代码如下:
with aDataSet do
begin
DisableControls;
bmk := GetBook;
try
First;
while not eof do
begin
DoSomeThing();
Next;
Application.ProcessMessages; //主管说这句代码是废话,可以除去。
end;
finally
if BookValid(bmk) then
GotoBook(bmk);
EnableControls;
end;
end;
首先声明一下,主管D的水平是很高的,他的话可能有道理。小弟对VCL研究得不是非常透,只是认为Application.ProcessMessages可以使其他的代码也可以消息循环起来这样这段代码的CPU占用不会很高,但是在DisableControls的前提下,Application.ProcessMessages是否真的没用了?如果是的话,为什么?谢谢各位老大!
with aDataSet do
begin
DisableControls;
bmk := GetBook;
try
First;
while not eof do
begin
DoSomeThing();
Next;
Application.ProcessMessages; //主管说这句代码是废话,可以除去。
end;
finally
if BookValid(bmk) then
GotoBook(bmk);
EnableControls;
end;
end;
首先声明一下,主管D的水平是很高的,他的话可能有道理。小弟对VCL研究得不是非常透,只是认为Application.ProcessMessages可以使其他的代码也可以消息循环起来这样这段代码的CPU占用不会很高,但是在DisableControls的前提下,Application.ProcessMessages是否真的没用了?如果是的话,为什么?谢谢各位老大!
解决方案 »
- 如何使DELPHI的接口方法做为其它函数的参数
- 请高高手指点怎么让DbGrid中数据的只能修改,不能进行增加和删除记录的操作
- Message.pas中WM_USER= $0400; 是什么意思?
- 如何计算两个日期相差天数?
- 哪个组件是实现ADO中RECORDSET功能的,怎么增加一个记录,怎么写。
- 怎么调用windows的计算器和写字板?
- 文件夹的拷贝和粘贴的问题
- filter按两个条件进行过滤如何写啊!
- 请问高手:读取数据表中的数字型字段,动态的来设置timer控件的interval属性,并用table1.moveby()自动显示"该"数据表中的数据条目,该怎么作?
- 61分就换来一个gz,太不心甘了。去者得分。
- 在线急等!!
- 求D6各种网络通信的代码
///////////
同意
而对于Application.ProcessMessages这句话,当然也是有用的,算不上废话,不过具体效果要结合你的程序来分析,如果业务处理比较简单,不用也无所谓,但如果比较复杂的话,处理大量数据时,当然要用ProcessMessages。
DisableControls好像是断开了与数据显示控件的联系,在循环中加Application.ProcessMessages是可以防止其他控件没响应,但cup还是很高,想降低cpu使用率,建议使用线程实现循环
>>>>应该有道理
相当与暂时放弃CPU,让别的程序抢占CPU,
我理解的是移交控制权,一般我在大的while循环中使用:Query1.First;
//检查销户记录
while not Query1.Eof do
begin
i:=i+1;
application.ProcessMessages;
没有在DisableControls使用过