Lade...
 

Progress

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

CX_FLOAT
CX_FRACTION
CX_NUMERIC
CX_PERCENT

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).

Die Zeitabschätzung kann erst beginnen, wenn mindestens 3 Datenpunkte vorhanden sind.

Die Flags TIME_ELAPSED und TIME_REMAINING werden nur beim ersten Progress(SHOW,id) für den entsprechenden Fortschrittsbalken berücksichtigt und werden bei späteren Updates ignoriert und müssen nicht angegeben werden. Ein Progress(CLOSE,id) setzt die Flags für die angegebene id auch wieder zurück.

 

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 :

Standard Abbruch-Nachricht anmelden
"cancel" (PROJECT_PROGRESS_CANCEL) Module SystemObject Call(EnterNamedInterrupt)
 
Bei der Angabe des Fortschritts wird erwartet, dass entweder ein Wert zwsichen 0 und 1 oder aber zwei Integer-Werte auf dem Stack liegen, damit sich diese Angaben nicht widersprechen. Wird keines von beidem angegeben, wird lediglich ein Text angezeigt oder der bisher angezeigte Text verändert. Wird nur ein Fortschrittswert angegeben, dann wird nur der Fortschrittsbalken aktualisiert, nicht aber der angezeigte Text.

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

Stack Position Beschreibung
Stack(In) Top - (für CLOSE) | VECTOR (für SHOW)
Stack(Out) Top -