delphi计时 |
答題得分者是:小傑克
|
keykill
一般會員 發表:5 回覆:8 積分:2 註冊:2009-03-21 發送簡訊給我 |
|
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
如果是我會這樣做, 觸發計時取得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 發送簡訊給我 |
[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 發送簡訊給我 |
時間變化....就是在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不是很好,以後看的人容易混淆
------
額有朝天骨,眼中有靈光 |
keykill
一般會員 發表:5 回覆:8 積分:2 註冊:2009-03-21 發送簡訊給我 |
|
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
程式我在網頁上直接寫的,可能會有打錯字,你參考意思就好
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 文 章=================== 按你说的做了,但是他是在我一进入窗体时就开始计时了 我希望我按某个按纽,比如按"开始",算法开始执行,他才开始计时,该怎么弄?谢谢
------
額有朝天骨,眼中有靈光 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |