سلام
با دلفی 7 مدت زمان سپری شده (Duration ) را می خواهم محاسبه کنیم.
سلام
با دلفی 7 مدت زمان سپری شده (Duration ) را می خواهم محاسبه کنیم.
درود :
مدت زمان سپری شده چی رو میخوای ؟
یه کم توضیح بیش تر .
فکر خوش .
قبل از اجرای کاری که طولش رو می خوای محاسبه کنی GetTickCount رو فراخونی کن که یک مقدار cardinal برحسب هزارم ثانیه بر می گردونه، بعد از پایان کار هم GetTickCount رو دوباره فراخونی کن. اختلاف این دو طول مدت انجام کار رو بر حسب میلی ثانیه بهت میده.
توضیح: GetTickCount مدت زمان سپری شده بعد از بالا اومدن سیستم رو برمی گردونه.
آخرین ویرایش به وسیله SAASTN : دوشنبه 09 فروردین 1389 در 21:05 عصر
از همون تابع GetTickCount استفاده کنيد.
تابع يا کدي که ميخواهيد مدت زمان انجامش رو بدست بياريد در قسمت Your Code بنويسيد .البته براي زمان هاي بالاتر از 5 ثانيه ممکن درست جواب نده براي زمان هاي بالا از تايمر استفاده کنيد.
ولي زير 5 ثانيه رو با دقت ميلي ثانيه اندازه گيري ميکنه .
var
t0,t1,t:Cardinal;
begin
t0:=GetTickCount;
// Your Code , do somthing .....
t1:=GetTickCount;
t:=t1-t0;
Caption:=IntToStr(t)+'/ms'
ممکنه بیشتر توضیح بدین. من زیاد این کار رو می کنم، حتی برای کارهایی که بیشتر از 30-40 دقیقه سیستم رو زیر بار می گذارن. تا حالا مشکلی ندیدم.البته براي زمان هاي بالاتر از 5 ثانيه ممکن درست جواب نده
استفاده از تایمر به نظرم راحت تر و مطمئن تره .
به هر تعداد که می خوای تایمر داشته باش و با فعال و غیر فعال کردنشون زمان را بدست بدون تغییر و کار خاصی .
فکر خوش .
سلام حالا اگه بخوایم Duration داشته باشیم یعنی فقط یه تایمر بصورت 00:00:00 که همینطوری یه ثانیه یه ثانیه بره جلو چکار باید بکنیم؟ (و اون زمان سپری شده رو در یه لیبیل نشون بدیم ) مثلا میخایم زمانی که برنامه اجرا شد رو کاربر بدونه چند دقیقه و ثانیه و ساعت باهاش کار کرده؟
ممنون
یک تایمر روی فرمتون قرار بدید و کد زیر رو تو رویداد OnTimer بنویسید و متغیرهای S,H,M رو از نوع عدد صحیح و به صورت سراسری تعریف کنید :
var
sH, sM, sS: String;
FirstRun: Boolean;
begin
Inc(S);
if S=60 then
begin
S:= 0;
Inc(M);
end;
if M=60 then
begin
S:= 0;
M:= 0;
Inc(H);
end;
sH:= IntToStr(H);
if Length(sH)= 1 then sH:= '0'+sH;
sM:= IntToStr(M);
if Length(sM)= 1 then sM:= '0'+sM;
sS:= IntToStr(S);
if Length(sS)= 1 then sS:= '0'+sS;
Label1.Caption:= sH+':'+sM+':'+ sS;
موفق باشید ...
توجه داشته باشید که اگر کل زمانی که می خواهید محاسبه کنید سیستم زیر بار باشد مثلا حلقه ای داشته باشید که زمام اجرای آن از interval تایمر بیشتر باشه دیگه تایمر کار نمی کنه. در این شرایط باید توی حلقه در زمان های مناسب (مثلا در هر صد بار اجرای حلقه یکبار) دستور Application.ProcessMessages; رو اجرا کنید تا تایمر درست کار کنه.