Announcement

Collapse
No announcement yet.

Verzögerung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Verzögerung

    Wie kann ich es erreichen, Anweisungen zeitlich zu verzögern(ohne eine TTimer-Komponente zu benutzen)? Ich will z.B. die caption eines Labels nach einer betimmten Zeitspanne verändern lassen. Gibt es einen bestimmten Befehl?

    Gruß Jonas

  • #2
    Eine Möglichkeit wäre über das OnIdle-Event der Applikation zu gehen

    Comment


    • #3
      Hallo Jonas,

      eine Möglichkeit wäre der Einbau einer Zählschleife (Im Projekt) die z.B. über einen definierten Wertebereich abzählt (for I := 0 to 10000) was aber nicht sehr Professionell sein dürfte und abhängig vom System verschiedene Zeiten beansprucht, die zweite Möglichkeit wäre eine Prozedur die das Programm für einen angegebenen Zeitraum blockiert. Erstelle eine Prozedur die sich bei Eintritt die aktuelle Zeit (Now) merkt, ggf dekodiert (DecodeTime) und anschl. solange in einer Schleife verharrt, bis die gewünschte Endzeit erreicht ist.

      mfg Holge

      Comment


      • #4
        Hallo,

        eine Schleife, die "blockiert" hat mindestens 2 gravierende Nachteile: <br>
        1. Es wird CPU-Zeit verbraten, die anderen Prozessen nicht mehr zur Verfügung steht. <br>
        2. In dieser Zeit können keine Windows-Botschaften beantwortet werden.<br>
        Gerade letzteres ist kritisch, da Win32 davon ausgeht, das alle Anwendungen bestimmte Botschaften innerhalb einer Zeitspanne beantworten. Unter NT sagt der <i>Taskmanager</i> in diesen Fällen immer: "Anwendung reagiert nicht mehr".

        Besser - und nur geringfügig aufwendiger - ist ein abgespalteter Thread, der über die Win32-API-Funktion <b>Sleep</b> für einen bestimmten Zeitraum "schlafen" gelegt wird. Er verbraucht keine Rechenzeit (somit entfällt der 1. Nachteil) und auch der primäre Thread der Anwendung läuft ungestört weiter (somit entfällt auch der 2. Nachteil)

        Comment


        • #5
          Das Problem mit dem Anzeigen ist, daß du mal versuchst nach<br>
          labelname.caption := 'abc'<br>
          mal ein <br>
          Application.ProcessMessages einfügst.

          Du mußt Windows/Delphi Gelegenheit geben, die Änderung zum Anzeigen zu bringen

          Comment


          • #6
            Hi,

            ich weiß zwar nicht, ob diese Variante für deinen Zweck gut genug ist, aber Versuchs doch mal der der Sleep Funktion, aber so laufen andere Prozesse nicht weiter and das ist nicht umbedingt gut.

            Gruß Philip

            Comment


            • #7
              Hallo Andreas,

              Mit "blockieren" meinte ich nicht das System sondern nur den Aussprung aus der entspr. Prozedur! Wenn bei jedem Schleifendurchgang "Application.Processmessages" aufgerufen wird, sollte die gewünschte Funktion erfüllt sein..! Ich wollte nur eine Anregung geben, wie das "Zeitproblem" zu lösen sei.

              mfg Holge

              Comment


              • #8
                PROCEDURE delay(ms : Integer);
                VAR firsttick, DelayFinish : Dword;
                BEGIN
                firsttick := gettickcount;
                REPEAT
                DelayFinish := firsttick + ms;
                Application.ProcessMessages;
                UNTIL (gettickcount > DelayFinish);
                END

                Comment

                Working...
                X