मैं हजारों फाइलों को डाउनलोड करने में एक लंबा लूप कर रहा हूं। मैं अनुमानित समय बिताना चाहता हूं, क्योंकि इसमें घंटों लग सकते हैं। हालांकि, मैंने जो लिखा है, उसके साथ मुझे मिलीसेकंड की औसत संख्या मिलती है। मैं इस औसत डाउनलोड समय को मिलीसेकंड से TDateTime
में कैसे परिवर्तित करूं?मैं मिलीसेकंड को टीडीएटीटाइम में कैसे परिवर्तित करूं?
मैं कहाँ Label1.Caption
सेट कर रहा हूं देखें:
procedure DoWork;
const
AVG_BASE = 20; //recent files to record for average, could be tweaked
var
Avg: TStringList; //for calculating average
X, Y: Integer; //loop iterators
TS, TE: DWORD; //tick counts
A: Integer; //for calculating average
begin
Avg:= TStringList.Create;
try
for X:= 0 to FilesToDownload.Count - 1 do begin //iterate through downloads
if FStopDownload then Break; //for cancelling
if Avg.Count >= AVG_BASE then //if list count is 20
Avg.Delete(0); //remove the oldest average
TS:= GetTickCount; //get time started
try
DownloadTheFile(X); //actual file download process
finally
TE:= GetTickCount - TS; //get time elapsed
end;
Avg.Add(IntToStr(TE)); //add download time to average list
A:= 0; //reset average to 0
for Y:= 0 to Avg.Count - 1 do //iterate through average list
A:= A + StrToIntDef(Avg[Y], 0); //add to total download time
A:= A div Avg.Count; //divide count to get average download time
Label1.Caption:= IntToStr(A); //<-- How to convert to TDateTime?
end;
finally
Avg.Free;
end;
end;
पुनश्च - क्योंकि मुझे यकीन है कि मेरे स्ट्रिंग कर रहा हूँ मैं पिछले 20 (या AVG_BASE) डाउनलोड की औसत गति की गणना के विभिन्न तरीकों के लिए खुला रहा हूँ, सूची समाधान सबसे अच्छा नहीं है। मैं सभी डाउनलोड के आधार पर इसकी गणना नहीं करना चाहता, क्योंकि उस समय गति बदल सकती है। इसलिए, मैं अभी पिछले 20
TStopWatch के लिए +1। ध्यान दें कि कुछ कंप्यूटरों पर, मुझे वास्तव में पता चला कि टीएसटॉपवॉच के अंतर्निहित Win32 एपीआई फ़ंक्शंस स्थिर नहीं थे और आईसीएच 4/आईसीएच 5 युग चिपसेट के साथ कुछ इंटेल पेंटियम 4 चिपसेट पर ठीक से काम नहीं करते थे। आधुनिक हार्डवेयर (Core2Duo और बाद में) पर अब कोई समस्या नहीं है, लेकिन ... मैंने मिलीसेकंड को मापने में काफी समय बिताया है (इसे सही तरीके से करने की कोशिश कर रहा है) और विंडोज एपीआई ने मुझे कोशिश करने के लिए बहुत दुख दिया है। (मैं यह नहीं कह रहा हूं कि मुझे कड़ी रीयलटाइम चाहिए, सिर्फ एक मिलीसेकंड काउंटर जो मुझे फ्रीज या लांच नहीं करता है) - TStopWatch GetTickCount से कहीं अधिक सटीक है! –
वास्तव में +1, अब अगर मैं केवल फाइल आकार को ध्यान में रख सकता हूं ....... हालांकि बहुत अलग कहानी ........ –