PDA

View Full Version : دلفی 7 مدت زمان سپری شده (Duration ) را می خواهم محاسبه کنیم



ali_abbasi22145
دوشنبه 09 فروردین 1389, 19:50 عصر
سلام
با دلفی 7 مدت زمان سپری شده (Duration ) را می خواهم محاسبه کنیم.

pezhvakco
دوشنبه 09 فروردین 1389, 19:57 عصر
درود :
مدت زمان سپری شده چی رو میخوای ؟
یه کم توضیح بیش تر .
فکر خوش .

SAASTN
دوشنبه 09 فروردین 1389, 20:21 عصر
قبل از اجرای کاری که طولش رو می خوای محاسبه کنی GetTickCount رو فراخونی کن که یک مقدار cardinal برحسب هزارم ثانیه بر می گردونه، بعد از پایان کار هم GetTickCount رو دوباره فراخونی کن. اختلاف این دو طول مدت انجام کار رو بر حسب میلی ثانیه بهت میده.
توضیح: GetTickCount مدت زمان سپری شده بعد از بالا اومدن سیستم رو برمی گردونه.

ali_abbasi22145
دوشنبه 09 فروردین 1389, 20:53 عصر
درود :
مدت زمان سپری شده چی رو میخوای ؟
یه کم توضیح بیش تر .
فکر خوش .

مثلا : زمان سپری شده از اجرای برنامه یا زمان سپری شده یک تابع یا چیز دیگر.

DAMAVAND
سه شنبه 10 فروردین 1389, 01:01 صبح
از همون تابع 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'

SAASTN
سه شنبه 10 فروردین 1389, 15:11 عصر
البته براي زمان هاي بالاتر از 5 ثانيه ممکن درست جواب نده
ممکنه بیشتر توضیح بدین. من زیاد این کار رو می کنم، حتی برای کارهایی که بیشتر از 30-40 دقیقه سیستم رو زیر بار می گذارن. تا حالا مشکلی ندیدم.

pezhvakco
سه شنبه 10 فروردین 1389, 18:35 عصر
استفاده از تایمر به نظرم راحت تر و مطمئن تره .
به هر تعداد که می خوای تایمر داشته باش و با فعال و غیر فعال کردنشون زمان را بدست بدون تغییر و کار خاصی .
فکر خوش .

حمید محمودی
چهارشنبه 11 فروردین 1389, 02:54 صبح
سلام حالا اگه بخوایم Duration داشته باشیم یعنی فقط یه تایمر بصورت 00:00:00 که همینطوری یه ثانیه یه ثانیه بره جلو چکار باید بکنیم؟ (و اون زمان سپری شده رو در یه لیبیل نشون بدیم ) مثلا میخایم زمانی که برنامه اجرا شد رو کاربر بدونه چند دقیقه و ثانیه و ساعت باهاش کار کرده؟

ممنون

Felony
چهارشنبه 11 فروردین 1389, 06:24 صبح
سلام حالا اگه بخوایم 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;

موفق باشید ...

SAASTN
چهارشنبه 11 فروردین 1389, 20:47 عصر
توجه داشته باشید که اگر کل زمانی که می خواهید محاسبه کنید سیستم زیر بار باشد مثلا حلقه ای داشته باشید که زمام اجرای آن از interval تایمر بیشتر باشه دیگه تایمر کار نمی کنه. در این شرایط باید توی حلقه در زمان های مناسب (مثلا در هر صد بار اجرای حلقه یکبار) دستور Application.ProcessMessages; رو اجرا کنید تا تایمر درست کار کنه.