关于Application.ProcessMessages的问题

zhangxuyu1118 2006-09-15 10:45:35
问题代码如下:
with aDataSet do
begin
DisableControls;
bmk := GetBookmark;
try
First;
while not eof do
begin
DoSomeThing();
Next;
Application.ProcessMessages; //主管说这句代码是废话,可以除去。
end;
finally
if BookmarkValid(bmk) then
GotoBookmark(bmk);
EnableControls;
end;
end;
首先声明一下,主管D的水平是很高的,他的话可能有道理。小弟对VCL研究得不是非常透,只是认为Application.ProcessMessages可以使其他的代码也可以消息循环起来这样这段代码的CPU占用不会很高,但是在DisableControls的前提下,Application.ProcessMessages是否真的没用了?如果是的话,为什么?谢谢各位老大!
...全文
2135 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangxuyu1118 2006-09-30
  • 打赏
  • 举报
回复
庆祝国庆,结帖
zhangxuyu1118 2006-09-21
  • 打赏
  • 举报
回复
http://www.codesky.net/showcode.asp?uid=74053
skypeople 2006-09-18
  • 打赏
  • 举报
回复
这句在这里没有什么用,除非你是想在循环中让程序可以处理用户的动作,比如提前退出循环;但在这里显然没有这个必要;
leavesofautumn 2006-09-16
  • 打赏
  • 举报
回复
Application.ProcessMessages
我理解的是移交控制权,一般我在大的while循环中使用:

Query1.First;
//检查销户记录
while not Query1.Eof do
begin
i:=i+1;
application.ProcessMessages;


没有在DisableControls使用过
happyhong 2006-09-15
  • 打赏
  • 举报
回复
小卢
DisableControls好像是断开了与数据显示控件的联系,在循环中加Application.ProcessMessages是可以防止其他控件没响应,但cup还是很高,想降低cpu使用率,建议使用线程实现循环
>>>>应该有道理
DunDao 2006-09-15
  • 打赏
  • 举报
回复
“在DisableControls的情况下,其它组件是接受不到消息的...”,严重怀疑中,至少太笼统了吧,最多也就是接收不到该DataSet的消息,呵呵。
而对于Application.ProcessMessages这句话,当然也是有用的,算不上废话,不过具体效果要结合你的程序来分析,如果业务处理比较简单,不用也无所谓,但如果比较复杂的话,处理大量数据时,当然要用ProcessMessages。
newfang 2006-09-15
  • 打赏
  • 举报
回复
GZ一下,对两星的说法有点怀疑~~
zhuminghua 2006-09-15
  • 打赏
  • 举报
回复
DisableControls好像是断开了与数据显示控件的联系
///////////
同意
xjjrocker 2006-09-15
  • 打赏
  • 举报
回复
在DisableControls的情况下,其它组件是接受不到消息的...------------------->学习
luxuewei5214 2006-09-15
  • 打赏
  • 举报
回复
DisableControls好像是断开了与数据显示控件的联系,在循环中加Application.ProcessMessages是可以防止其他控件没响应,但cup还是很高,想降低cpu使用率,建议使用线程实现循环
GARNETT2183 2006-09-15
  • 打赏
  • 举报
回复
在DisableControls的情况下,其它组件是接受不到消息的...
human_2 2006-09-15
  • 打赏
  • 举报
回复
Application.ProcessMessages
相当与暂时放弃CPU,让别的程序抢占CPU,
xjjrocker 2006-09-15
  • 打赏
  • 举报
回复
sleep(n)尽量少用!
zhangxuyu1118 2006-09-15
  • 打赏
  • 举报
回复
问大侠们:Application.ProcessMessages可以降低CPU的消耗吗?
zhangxuyu1118 2006-09-15
  • 打赏
  • 举报
回复
在使用线程的时候我也喜欢用Application.ProcessMessages代替sleep(n),不知道这个习惯好不好(当然,在Application.ProcessMessages可以使用的场合).各位大侠可以讨论一下Application.ProcessMessages和sleep(n)哪个效率高.
AOCOC 2006-09-15
  • 打赏
  • 举报
回复
在循环中加Application.ProcessMessages是可以防止其他控件没响应。。就是这样,我也常用到。。
一; delphi 快速导出excel uses ComObj,clipbrd; function ToExcel(sfilename:string; ADOQuery:TADOQuery):boolean; const xlNormal=-4143; var y : integer; tsList : TStringList; s,filename :string; aSheet :Variant; excel :OleVariant; savedialog :tsavedialog; begin Result := true; try excel:=CreateOleObject('Excel.Application'); excel.workbooks.add; except //screen.cursor:=crDefault; showmessage('无法调用Excel!'); exit; end; savedialog:=tsavedialog.Create(nil); savedialog.FileName:=sfilename; //存入文件 savedialog.Filter:='Excel文件(*.xls)|*.xls'; if savedialog.Execute then begin if FileExists(savedialog.FileName) then try if application.messagebox('该文件已经存在,要覆盖吗?','询问',mb_yesno+mb_iconquestion)=idyes then DeleteFile(PChar(savedialog.FileName)) else begin Excel.Quit; savedialog.free; //screen.cursor:=crDefault; Exit; end; except Excel.Quit; savedialog.free; screen.cursor:=crDefault; Exit; end; filename:=savedialog.FileName; end; savedialog.free; if filename='' then begin result:=true; Excel.Quit; //screen.cursor:=crDefault; exit; end; aSheet:=excel.Worksheets.Item[1]; tsList:=TStringList.Create; //tsList.Add('查询结果'); //加入标题 s:=''; //加入字段名 for y := 0 to adoquery.fieldCount - 1 do begin s:=s+adoQuery.Fields.Fields[y].FieldName+#9 ; Application.ProcessMessages; end; tsList.Add(s); try try ADOQuery.First; While Not ADOQuery.Eof do begin s:=''; for y:=0 to ADOQuery.FieldCount-1 do begin s:=s+ADOQuery.Fields[y].AsString+#9; Application.ProcessMessages; end; tsList.Add(s); ADOQuery.next; end; Clipboard.AsText:=tsList.Text; except result:=false; end; finally tsList.Free; end; aSheet.Paste; 。。。。。。

5,928

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧