双线程的简单问题(25)

Unregistered / Unconfirmed
GUEST, unregistred user!
vari:integer;
begin
for i:=0 to 1000000do
label1.Caption:=inttostr(i) ;
end;
为什么要等运算完才能把结果显示在label1.Caption上能否一边运算一边在label1.Caption上显示运算进度.是否要用双线程.如何用,如何写语句
 
是不是这样的效果?unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private { Private declarations } public { Public declarations } end;
var Form1: TForm1;implementation{$R *.dfm}function fuc:integer;vari:integer;
begin
for i:=0 to 10000do
begin
form1.Label1.Caption:=inttostr(i) ;
application.ProcessMessages;
end;
result:=0;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
fuc;
end;
end.
看看万一老师的文章http://www.cnblogs.com/del/archive/2009/02/05/1384713.html
 
请问一下加了这句是可以看到进度,这样会不会运算速度慢很多application.ProcessMessages;
 
加多一个timer计算她的运算时间应该怎样写语句
 
procedure TForm1.Button1Click(Sender: TObject);var i: Integer;
timeNum: Integer;
begin
timeNum := GetTickCount;
for i := 0 to 10000do
begin
Label1.Caption := IntToStr(i);
Application.ProcessMessages;
end;
ShowMessage(IntToStr(GetTickCount - timeNum));
end;
就这段程序来说Application.ProcessMessages;是会慢很多,不过要看你用在哪里,如何取舍了。很多情况下Application.ProcessMessages;是一个很好的解决方法
 
会影响运算速度, application.ProcessMessages;
DescriptionCall ProcessMessages to permit the application to process events that are currently in the queue.用线程去运算应该会好一点
 
多人接受答案了。
 
顶部