Noch nicht registriert? Registrier Dich jetzt!
Application.ProcessMessages
Autor Thema
Profil Webseite
Da es (noch) keine "Programmier-Themen" gibt, passt das vielleicht hier am besten hin.
Habe folgendes (kleines) Problem (beispielhaft):
Annahme: Formular mit einem Label

Label.Caption := 'Text';
while do begin
(stark CPU-lastiger Code)
end;

Das zeigt sich so, dass auf dem Bildschirm die Label-Caption erst erscheint, wenn die while-Schleife beendet ist, also die CPU-Last nachläßt. Das Label soll aber schon während der Schleife zu sehen sein.
Also Codeerweiterung:

Label.Caption := 'Text';
Application.ProcessMessages;
while do begin
(stark CPU-lastiger Code)
end;

Soll eigentlich dazu führen, dass das System die ausstehenden Messages ausführt, also auch das Label zeichnet.
So funktioniert das jedenfalls mit Delphi.
Leider nicht mit WDSibyl.
Gibt's nen anderen Trick ?





editiert von: tobo, 14.04.2007, 20:52 Uhr
 
 
Profil Webseite
Hallo!

Es gibt mehrer Möglichkeiten um so ein Problem zu lösen.

1.) Du gibst die While-Schleife in ein Thread und wartest im Haupt-Prozess ab, wann der Thread fertig ist. (durch Semaphoren) Die Programmierung ist nicht so kompliziert. Bei dem Installprogramm habe ich schon so was programmiert.

2.) Das müsste auch gehen, aber solltest Du mal testen
Code
  1. Label.Caption := 'Text';
  2. Label.Refresh;
  3. sleep(100);
  4. while do begin
  5. (stark CPU-lastiger Code)
  6. sleep(100);


3.) Probiere mal das
Code
  1. Label.Caption := 'Text';
  2. Label.Refresh;
  3. while do begin
  4. (stark CPU-lastiger Code)
  5. sleep(100);


Das Problem liegt darin, dass bei OS/2 der Treiber bzw. die WPS erst dann dran kommen wenn die Hardware nicht so viel machen muss. Das hat den Vorteil, dass rechenintensive Berechnungen oder Aktionen schneller fertig werden.
Bei Windows ist es umgekehrt. Da ist die Proirität der Arbeitsoberfläche höher.

Was besser ist kann ich nicht sagen. Beides hat Vor- und Nachteile.

bye,
Wolfgang