time left for file copy
От: Аноним  
Дата: 08.11.07 16:39
Оценка:
Добрый вечер.

Пишу программу которая выполняет ф-ию заливки стуктуры файлов с одного место в другое (к примеру нужно переписать все файлы из директории 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 сек. по таймеру.

Что я делаю не так?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.