Progress
199655
Progress(CLOSE[, id]) Progress(SHOW[, id])
Beschreibung
Mit diesem Befehl kann der Fortschritt eines Prozesses kommuniziert werden. Hiefür kann mithilfe des ersten Parameters "SHOW" ein Fortschritt angezeigt werden, der anschließend mithilfe von "CLOSE" wieder geschlossen werden kann. Der optionale zweite Parameter dient bei mehreren Prozessen dazu zu identifizieren, zu welchem Prozess Informationen hinzugefügt werden sollen bzw. welcher Fortschrittsbalken geschlossen werden soll.
Bei mehreren Prozessen werden später angemeldete Prozesse als Unterprozesse der vorher angemeldeten Prozesse betrachtet. Die Fortschrittsbalken der späteren Prozesse werden unter den bisher vorhandenen angezeigt und falls ein Übergeordneter Prozess per Progress(CLOSE,id) geschlossen wird, dann werden alle danach angemeldeten Prozesse ebenfalls geschlossen.
Bei mehreren Prozessen wird für jede id der Fortschritt, die Laufzeit und die Restzeit gehalten. Für jeden Fortschrittsbalken kann separat eingestellt werden, ob die vergangene Zeit und die verbleibende Zeit angezeigt werden soll.
Wird der Parameter SHOW angegeben, so wird auf dem Stack ein Vektor erwartet, der Informationen über den Fortschritt bereitstellt.
Mögliche Werte sind:
Typ | Flag | Beschreibung |
---|---|
STRING ML_STRING |
Beschreibungstext |
Ein Wert zwischen 0 und 1, der anteilig den Fortschritt angibt | |
INTEGER, INTEGER | Zwei Integer-Werte geben an, wie viele von einer Gesamtzahl an Elementen schon verarbeitet sind. Bspw. würde 1 3 angeben, dass gerade das 1. von 3 Elementen verarbeitet wird. |
TIME_ELAPSED | Im Fortschrittsfenster soll angezeigt werden, wie lange der Prozess schon läuft |
TIME_REMAINING |
Aufgrund der bisherigen Fortschrittsinformationen soll eine Abschätzung angezeigt werden, wie langed der Prozess wohl noch läuft. Die Zeitabschätzung wird aktuell linear, quadratisch, exponentiell und logartihmisch über die bisherigen Datenpunkte approximiert und die Funktion mit dem niedrigsten Fehlerwert (MSE) wird für die aktuelle Schätzung übernommen. Dabei gibt es einige Metriken, die verhindern sollen, dass die Schätzung zu oft geändert wird, indem nur signifikante Änderungen zu einer geänderten Zeitabschätzung führen. Die aktuell verwendete Funktion und der aktuelle Fehler kann durch das Setzen der Umgebungsvariable CX_DEBUG_PROGRESS_WINDOW im Progress-Fenster angezeigt werden (nur nativ). |
Falls per CX_SYSTEM_OBJECT::EnterNamedInterrupt ein "cancel"-Interrupt registriert wurde, dann wird auf dem Fortschrittsfenster ein Abbrechen-Button dargestellt, mit dem die Aktion unterbrochen werden kann. Wenn keine besonderen Aufgaben beim Abbruch durchgeführt werden sollen kann mit dem folgenden Code die Standard-Message angemeldet werden :
"cancel" (PROJECT_PROGRESS_CANCEL) Module SystemObject Call(EnterNamedInterrupt)
Codebeispiel
// main progress [ "Installing application, step:" 0 3 TIME_ELAPSED TIME_REMAINING ] Progress(SHOW) [ "Preparing installer" ] Progress(SHOW, prep) //... Progress(CLOSE, prep) // preparation completed [ 1 3 ] Progress(SHOW) // update main progress [ "Copying files" 0 76 TIME_ELAPSED TIME_REMAINING ] Progress(SHOW, copy_files) do { //... copy files [ i 76 ] Progress(SHOW, copy_files) } while Progress(CLOSE, copy_files) // file copy completed [ 2 3 ] Progress(SHOW) // update main progress [ "Finalizing..." ] Progress(SHOW, final) [ 1% ] Progress(SHOW, final) //... [ 100% ] Progress(SHOW, final) [ 3 3 ] Progress(SHOW) // update main progress Progress(CLOSE) // close main progress and implicitly final progress
Fehlerverhalten
Falls cancel ausgeführt wird, oder eine Exception ausgelöst wird, dann werden alle aktuell aktiven Fortschirttsbalken geschlossen. Im Fall einer Exception wird der textuelle Inhalt der Fortschirttsanzeige zur besseren Fehlersuche als Warnung auf dem Logger cx.ui.progress ausgegeben.
Stack | Position | Beschreibung |
---|---|---|
Stack(In) | Top | - (für CLOSE) | VECTOR (für SHOW) |
Stack(Out) | Top | - |