Obliczanie czasu

0

Witam.
W moim programiku wykonują się pewne obliczenia. O ich postępie informuje wskaźnik postępu. Dodatkowo obliczany jest czas trwania tych analiz o raz obliczany jest przypuszczalny czas do ich zakończenia. Czas ile pozostało jest obliczany na podstawie tego ile procent do tej pory się wykonało i ile to zajeło czasu. Wszystko jest świetnie jeżeli analizy mają się zakończyć w ciągu 24 godzin. Nie wiem natomiast jak sobie poradzić gdy obliczenia mają zająć kilka dni. Program piszę w BCB6.

Mój sposób obliczania:

pozostalo=TimeToStr((100/postep)*StrToTime(czas));
pozostalo=TimeToStr(StrToTime(pozostalo)-StrToTime(czas);

//postep wskazuje ile procet się wykonało np. 34%
//czas wskazuje ile do tej pory to zajeło np. 247

Jeżeli ktoś ma pomysł jak to wyliczać czas gdy obliczenia będą trwały klika dni to czekam na wszelkie sugestie i propozycje kodu.

Pozdrawiam.

0

Mam podobny problem więc chętnie się dowiem jeżeli ktoś ma jakiś pomysł

0

odejmuj od czas_start i czas_aktualny tyle sekund ile jest ich w dobie (zwiększaj liczniki doba_zajęło i doba_pozostało), dopuki wynik będzie dodatni, to co pozostanie to poddaj powyższej obróbce, a zmienne doba_* możesz wyświetlić jeśli <>0

może się zdażyć sytuacja że czas_aktualny < czas_start , wtedy dodaj sekundy całej doby do czas_aktualny (cofnij o jeden krok odejmowanie i zwiększanie dób)

0

W bcb6 istnieje mnostwo funkcji daty i czasu. Tutaj moze sie przydac Now(), zwracajaca date i czas. Polecam rowniez przejzenie funkcji z biblioteki SysUtils.

0

Działanie na systemowej dacie i godzinie może być ciężkie gdyż program ma opcję chwilowego zatrzymania obliczeń, a wtedy nie oblicza czasu wykonywania operacji, więc pobranie z systemu czasu_startu i badanie różnicy odpada.

0

Czy nie mozna zapamietac czasu przy zatrzymaniu i wznowieniu obliczen?

0

Bawiłem się trochę z odejmowanie daty i czas ale mi to niezbyt wychodziło w dodatku nie mam pomysłu jak to zastosować aby obliczyć ile jeszcze czasu będą się wykonywać obliczenia. Może jakiś fragment kodu mógłbym prosić :)

0
extern PACKAGE double __fastcall MilliSecondSpan(const System::
TDateTime ANow, const System::TDateTime AThen);

Jesli chodzi o przewidywanie czasu pozostalego do zakonczenia obliczen, Twoj pomysl (po modyfikacji) wydaje sie dobry.

<font color="green">//Dopisane:</span>
Przypadkiem znalazlem jeszcze jedna funkcje pozwalajaca obliczac roznice czasow (w milisekundach):

DWORD Start = GetTickCount();
//Obliczenia
DWORD Roznica = GetTickCount() - Start;

1 użytkowników online, w tym zalogowanych: 0, gości: 1