Rest Zeitschätzung bei langen Berchnungen



  • Hallo,

    ich habe in meiner Anwendung einen Algorythmus laufen, der je nachdem in 5min abgearbeitet sein kann, aber auch in vielen Stunden.

    In einem Label lasse ich mir immer ausgeben, wieviel % des Algorythmus schon durchgelaufen sind. Nun würde ich gerne eine Zeitangabe machen um anzuzeigen wie lange der Algorythmus noch braucht.

    Meine Idee wäre zwischen jeden abgearbeiteten % die benötigte Zeit zu berechnen und diese als Grundlage für die restliche Zeit zu nehmen. Oder einen Mittelwert aus bisher allen benötigten Zeiten.

    Was könnt ihr mir empfehlen, wie würdets ihr da rangehen. SOllte ich dann auch einen Timer verwenden?

    Timmy



  • Hi,

    schau Dir mal die Funktion GetTickCounts() und die Komponente TDateTime. Je nach gewünschter Genauigkeit (GetTickCount() = ms, TDateTime = Sek.), kann man zu Beginn der Funktion den Startwert ermitteln und diesen dann gegen den aktuellen Wert rechen. Der Rest ist dann Prozentrechnen. 🙂 Wenn es mehrere Stunden dauern kann, würde ich TDateTime nehmen.

    Beispiel:

    TDateTime dtStart = TDateTime::CurrentDateTime(); // zu Beginn der Berechnung setzen.
    TDateTime dtAktuell;
    
    //Immer dann wenn Du eine Aktualisierung der bisher abgearbeiteten Prozent ausgibst, kannst Du an dieser Stelle auch die Berechnung für die Restdauer durchführen.
    
    dtAktuell = TDateTime::CurrentDateTime();
    double dDauerverstrichen = dtAtkuell.Val - dtStart.Val;
    dDauerverstrichen = dDauerverstrichen / aktuelle_prozent * 100;
    // Ausgabe in z.B. ein Label 
    LabelRestDauer->Caption = "voraussichtlich beendet: " + TDateTime(dt.Aktuell.Val + dDauerverstrichen).TimeString(); // oder .DateTimeString()
    // oder aber wenn Du nur die restliche Dauer haben willst:
    LabelRestDauer->Caption = "voraussichtlich beendet: " + TDateTime(dDauerverstrichen).TimeString();
    


  • Shau auch mal in die FAQ oder such nach QUeryPerformanceCOunter...

    -junix


Anmelden zum Antworten