New account

Application.ProcessMessages  Bottom

  • 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
  • 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

    Label.Caption := 'Text';

    Label.Refresh;

    Sleep(100);

    while do begin

    (stark CPU-lastiger Code)

    Sleep(100);

    end;


    3.) Probiere mal das

    Code

    Label.Caption := 'Text';

    Label.Refresh;

    while do begin

    (stark CPU-lastiger Code)

    Sleep(100);

    end;


    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
  • 0 users

This list is based on users active over the last 30 minutes.