我在执行一个操作时如何对此操作进行计时(200分)

  • 主题发起人 主题发起人 dxpjj
  • 开始时间 开始时间
D

dxpjj

Unregistered / Unconfirmed
GUEST, unregistred user!
例如:我在执行将文件保存到数据库时用LoadFromFile,如果文件很大,需要很长时间,我用一个Lable来显示用去的时间,可是用Timer时,在ontime事件中不触发。请问如何解决,急呀....
 
怎么不触发阿,TIMER就可以.间隔设为1000毫秒,这样每触发一次,i := i+1
然后LABEL1.CAPTION := inttostr(i);
 
在调用LoadFromFile保存文件时,就不会触发了
 
换一个动画吧,显示正在处理,请稍侯.
 
客户要求要显示时间呀,好像多线程能解决,不知道该如何写呀
 
首先要估算出保存文件需要的时间,这对于不同性能的计算机,时间是不一样的。
其次可以根据用去的时间,计算剩余多少时间。
单第一个问题较难处理,
关注一下
[?]
 
在每个循环时调用一下application.ProcessMessages应该可以
 
先用x:=GetTickCount,再这样取得过去的时间GetTickCount-x,具体怎样操作,请参考Win32 API.
 
不是看剩余时间,而是看用去的时间
 
开一个线程,把LoadFromFile放到线程里面做。这样计时就可以用TTimer了。
否则在主线程中LoadFromFile是要堵塞消息处理的。
 
请问如何在线程中调用一个窗体,我找了很多,都不行,运行时出错
 
PostMessage一个消息给窗体,窗体做一个消息处理的函数,让窗体自己处理就好了。
 
在你的LoadFromFile里的 循环最后加一个 application.ProcessMessages
用Timer就可以了
 
没有循环的,只执行一次LoadFromFile,不过LoadFromFile执行的时间很长,用楼上的方法不行
 
我写了一个线程
unit JcThread;

interface

uses
Classes, JC, Windows, Forms;

type
TJCThread = class(TThread)
private
JCForm:TJCForm;//这个就是进程窗口
{ Private declarations }
protected
procedure ShowJC;
procedure Execute; override;
end;

implementation

procedure TJCThread.ShowJC;
begin
//在线程中创建窗体
if not Assigned(JCForm) then JCForm := JCForm.Create(nil);
JCForm.Show;
end;

procedure TJCThread.Execute;
begin
Synchronize(ShowJC);
end;

end.

在主窗体中调动如下
TJCThread.Create(False);

但运行程序后没有窗体JCForm调出来,请高手帮分析一下原因
 
怎么会不触发:
在loadfromfile前,设置timer1.enable:=True;
procedure TForm.Timer1Timer(Sender: TObject);
begin
update;
label1.caption:=inttostr(StrToIntDef(Label1.Caption,0)+1);
end;
 
读取文件,先获得文件大小,再获得1秒读取多少KB,关键看你是什么文件
 
采用多线程就可以了。
 
是不是在窗体的Create的事件里LoadFromFile?
修改如下试试:
定义JCForm 为全局变量
procedure TJCThread.ShowJC;
begin
//在线程中创建窗体
if not Assigned(JCForm) then JCForm := JCForm.Create(Application);
end;

procedure TJCThread.Execute;
begin
ShowJC;
PostMessage(MainForm.Handle, WM_SHOWJC, 0, 0);
end;

在主窗口接收WM_SHOWJC函数中
...
procedure ShowJCForm; message WM_SHOWJC;
...
procedure TMainForm.ShowJCForm;
begin
JCForm.Show;
end;
 
var
t,t1,t2:TDateTime;
begin
t1:=now;
事件;
t2:=now;
t:=t2-t1;//耗时
 
后退
顶部