FortschrittsanzeigeBetreff: Bietet JSL eine „Beschäftigt“-Anzeige ähnlich einem sich drehenden Rad oder einer Bar?
Hier ist ein Beispiel für einen in JSL erstellten Fortschrittsindikator. Es verwendet einen Namespace, um den Code zu kapseln.Die letzten paar Zeilen sind eine Testeinstellung Arbeitsbelastung größer oder kleiner.Für eine reibungslose Leistung muss die Funktion progress:set relativ oft aufgerufen werden. Die Funktion progress:init muss den Gesamtarbeitsaufwand kennen, der geleistet wird, um den richtigen Prozentsatz zu ermitteln.
Bearbeiten: Ich habe eine Kopie der JSL angehängt. Anscheinend wird die Inline-JSL möglicherweise nicht korrekt angezeigt.

progress = New Namespace(
"progress"
);
progress:init = Function( {workload},
progress:TotalWork = workload;
progress:Current = -1;
progress:tick = Tick Seconds();
progress:Window = New Window( "progress",
H List Box(
Spacer Box( size( 20, 20 ) ),
progress:busy = Busy Light( <<SIZE> 1 / 30,
progress:tick = now;
If( pct != progress:Current,
progress:Current = pct;
progress:left << size( progress:Current, 20 );
progress:right << size( 100 - progress:Current, 20 );
progress:text << settext( Char( pct ) || "%" );
);
progress:busy << advance;
Wait( 0 );
)
);
progress:term = Function( {},
progress:Window << closeWindow
);
/////////////////////////
// test
/////////////////////////
workload = 1e6; // 1e6 is about 5 seconds
progress:init( workload );
For( i = 1, i <= workload, i++,
progress:set( i )
);
progress:term();</SIZE>
Betreff: FortschrittsbalkenGute Frage.
Der von Ihnen gewünschte Test soll verhindern, dass die Anzeige mehr als 30 Mal pro Sekunde aktualisiert wird, was Zeitverschwendung wäre. Tatsächlich würde das Beispiel ohne diesen Test die Anzeige millionenfach aktualisieren und die Ausführung sehr lange dauern.
Das Beispiel geht davon aus, dass es 1e6-Dateien gibt. Sie sollten eine Schleife ähnlich den letzten 6 Codezeilen schreiben und Ihre Dateiverarbeitung unmittelbar davor durchführen progress:set(i) . Und ändern Sie 1e6 in Ihre Anzahl an Dateien.
Betreff: FortschrittsbalkenHallo Craige
Vielen Dank für Ihren Hinweis zum Fortschrittsbalken.
Ich möchte mit dem Fortschrittsbalken überwachen, wie viele Dateien verarbeitet wurden.
Bei meiner „Arbeitsbelastung“ geht es also nicht um „Zeit“, sondern um „Anzahl“. (N Dateien im Ordner)
Bedeutet das, dass ich „progress:tick“ und den Satz löschen sollte?
If( now - progress:tick > 1 / 30,
progress:tick = now;
Könnten Sie mir ein paar Ratschläge geben?
Danke.