線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1487
推到 Plurk!
推到 Facebook!

delphi计时

答題得分者是:小傑克
keykill
一般會員


發表:5
回覆:8
積分:2
註冊:2009-03-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-04-14 03:31:27 IP:222.95.xxx.xxx 訂閱
最初目的是为了计算一个程序的运行时间,(不包括程序里暂停的时间,我的程序设置了延迟和暂停)

具体希望有如下实现效果:有一个计时用的东西(计时器?),在程序开始运行的时候开始从0计时

单位是毫秒,遇到暂停或延迟的地方就停止计时,程序继续运行时再继续计时

最好还可以在界面上设置一个edit几类的东西,用来显示时间的变化(从0开始)就是希望是动态的

该如何实现,给点建议?谢谢.
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-04-14 03:59:49 IP:61.217.xxx.xxx 訂閱
如果是我會這樣做, 觸發計時取得t1 = now 然後再timer 裏處理顯示 計時=now-t1  , 延遲和暫停部分比較麻煩,要另外寫一個function
去處理延遲跟暫停, 在延遲和暫停的function 的裡面另外處理延遲function 的執行時間,並且然後加回t1
類似這樣

procedure myDelay( imSec:integer )
var t3:tdatetime;
begin
t3 := now;
xxxxx //延遲
t1 := t1 (now - t3);
end;

timer 中
計時 = now - t1
------
額有朝天骨,眼中有靈光
編輯記錄
小傑克 重新編輯於 2009-04-14 04:01:13, 註解 無‧
keykill
一般會員


發表:5
回覆:8
積分:2
註冊:2009-03-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-04-14 12:36:59 IP:222.95.xxx.xxx 訂閱

[code delphi]

procedure TForm1. delay;
for i:=0 to rnum-1 do
work_old[i]:=available_old[i];
for i:=0 to pnum-1 do
finish_old[i]:=false;
message_old:='正在执行安全性检查';
Memo2.Clear;
Memo2.Lines.Add(message_old);

delay;


flag:=search_old;
end;
for i:=1 to pnum do
begin
if(finish_old[i-1]=false) then
begin
result:=false;
exit;
end;
end;
result:=true;
end;

[/code]

我觉得如果只是单纯的计算算法执行时间的话应该没多大问题
设置一个全局变量t,计算每两个delay之间的运行时间加到t上就是了...对吧?...
主要是我现在想在界面上显示时间的动态变化,0ms->1ms->2ms->3ms
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-04-14 15:17:12 IP:61.217.xxx.xxx 訂閱
時間變化....就是在timer 裡面寫 計時= now - t1  呀
我講詳細點好了,因為你想要把delay時間扣掉....所以這樣做
t1 是全域變數,在開始計時的時候取得,我以form create時舉例
delay 函數中,把delay的時間加回t1
timer的interval 設定成很小,例如1

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Caption := FormatDateTime('hh:nn:ss.zzz',now-t1);
end;

執行的結果...想像中應該是 caption 會一直跳, 顯示 now 和 Formcreate時取得t1 的時間差, 但是t1不是固定的
每當執行delay的時候, t1 會跟著往前跑(如我第一篇中寫法 t1 := t1 (now - t3)),這樣就可以避過延遲與暫停花的時間

順便多說一點, now 是delphi常用函數在sysunits裡面,命名變數用now不是很好,以後看的人容易混淆
------
額有朝天骨,眼中有靈光
編輯記錄
小傑克 重新編輯於 2009-04-14 15:26:29, 註解 無‧
小傑克 重新編輯於 2009-04-14 15:34:07, 註解 無‧
keykill
一般會員


發表:5
回覆:8
積分:2
註冊:2009-03-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-04-15 00:36:11 IP:222.95.xxx.xxx 訂閱
按你说的做了,但是他是在我一进入窗体时就开始计时了
我希望我按某个按纽,比如按"开始",算法开始执行,他才开始计时,该怎么弄?谢谢
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-04-15 09:19:37 IP:59.112.xxx.xxx 訂閱
程式我在網頁上直接寫的,可能會有打錯字,你參考意思就好
var t1 :tdatetime;

procedure Form1Create(Sender:TObject);
begin
Timer1.Enable := false;
Timer1.interval := 3;
end;

procedure Button1Click(Sender:TObject); // 開始計時和停止
begin
t1 := now;
timer1.Enable := not Timer1.Enable;
end;

procedure Timer1Timer(Sender:TObject);
begin
Caption := Formatdatetime('hh:nn:ss.zzz', now - t1);
end;

procedure myDelay(imsDelay:integer);
var t3:tdatetime;
begin
t3 := now;
delay2(imsdelay);
t1 := t1 (now - t3);
end;

===================引 用 keykill 文 章===================
按你说的做了,但是他是在我一进入窗体时就开始计时了
我希望我按某个按纽,比如按"开始",算法开始执行,他才开始计时,该怎么弄?谢谢
------
額有朝天骨,眼中有靈光
系統時間:2024-05-19 13:41:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!