Добрый вечер.
Пишу программу которая выполняет ф-ию заливки стуктуры файлов с одного место в другое (к примеру нужно переписать все файлы из директории c:\Windows\ в указанную директорию). Задача в том что я не могу правильно написать алгоритм подсчета времени.
function TFormCopy.CalculateTime(newReaded: Int64; maxSize : Int64): Int64;
var
nowTime, timeSpent : Cardinal;
bytePerSec : Integer;
begin
Result := -1;
if newReaded = 0 then Exit;
nowTime := MilliSecondOfTheDay(Now);
if lastTime = 0 then
begin
lastTime := nowTime;
Exit;
end;
timeSpent := nowTime - lastTime;
if timeSpent > 0 then
begin
bytePerSec := newReaded div timeSpent;
if bytePerSec <= 0 then
bytePerSec := 1;
Result := Floor(maxSize - newReaded) div bytePerSec;
end;
lastTime := nowTime;
end;
Эта ф-ия возращает время в секундах. newReaded — сколько байт уже считано всего.
Вызываю эту функцию из диалога в котором подсчитывается для пользователя премерное время завершения, данные беру у Thread'a в котором происходит копирование. Ф-ия вызывается раз в 250 сек. по таймеру.
Что я делаю не так?