Announcement

Collapse
No announcement yet.

Timer Objekt?

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

  • Timer Objekt?

    Und wie starte/beende ich den Timer jetzt? Habs Probiert mit TTimerThread.execute; kommt aber Fehlermeldung:<br><b>
    [Fehler] Unit1.pas(145): Undefinierter Bezeichner: 'execute'<br></b>
    Daraufhin habe ich dann eine neue Procedure erstellt: start dann kam aber volgende fehlermeldung:<br><b>
    [Fehler] Unit1.pas(146): Diese Form des Methodenaufrufs ist nur für Klassenmethoden erlaubt<br></b>
    <br>Wie mache ich das jetzt?<br>
    Und danke für die Hilfe!<br> Wenn ich jetzt die Antwort erhalte schaffe ichs wohl alleine weiter

  • #2
    Timer Objekt?

    Kennt jemand ein Gratis Timer Objekt was wirklich Richtig funktioniert? Die TTIMER Komponente in Delphi zählt nicht ganz genau!

    Comment


    • #3
      Hallo,

      die TTimer-Komponente von Delphi zeigt <b>exakt</b> alle die Timer-Botschaften an, die das Fenster vom Betriebssystem erhält. Das Problem mit <b>WM_TIMER</b> besteht nur darin, das diese Botschaft in der Rangfolge an letzter Stelle steht und nur zugestellt wird, wenn das Betriebssystem nichts anderes zu tun hat ;-)

      Wenn ein verlässlicher Timer benötigt wird, stehen die API-Funktionen des <b>Multimedia Timers</b> oder eine eigene "Zeitfunktion" in einem Thread (Sleep) zur Verfügung. Wenn nach der Zeichenfolge "Multimedia Timer" oder "Sleep" im Forum gesucht wird, sollten sich einige Beispiele dazu finden lassen

      Comment


      • #4
        Kann mir nicht jemand ein kurzes Beispiel geben? Ich habe in der hilfe und in der Newsgroup ein wenig danach gesucht aber nichts gefunden

        Comment


        • #5
          Ich habs mit dem Multimediatimer timeSetEvent probiert der compiler sagt aber: Undefinierter Bezeichner!
          Muss man noch irgend was hinzufügen? Weil ich will keinen fölligen stillstand haben (wie bei sleep) in der zeit wo die zeit ableuft sollen doch noch ereignisse ausgeführt werden oder die form verschoben werden können

          Comment


          • #6
            Hi

            Nutzt Du Sleep() in einem Thread schläft NUR dieser Thread und NICHT die Anwendung. Das ist auch die Grundidee auf die sich Andreas bezieht.

            <pre>

            procedure TTimerThread.Execute;
            begin
            while not Terminated do
            begin
            Sleep(100); // 100 ms

            Synchronize(DoTimeEvent);
            // oder ähnliche Actions/Benachrichtigungen
            end;
            end;

            </pre>

            Gruß Hage

            Comment


            • #7
              Und warum kann ich dann die Form nicht mehr mit der maus bewegen, buttons drücken oder anderes? Selbst beenden klappt nicht! Obwohl ich den timer sogar in eine andere Unit gepackt habe

              Comment


              • #8
                Hi

                Halt mal, in welchem Kontext rufts Du Sleep() auf ?
                In einem separatem TThreadobjekt oder einfach im Hauptprogram ?

                Solltest Du Sleep() im Mainthread (Hauptprogram) aufrufen blockiert dies natürlicherweise die komplette Anwendung !

                Füge mal folgendes vor dem Aufruf von Sleep() ein:

                <pre>

                if MainThreadID = GetCurrentThreadID then
                MessageBeep(0);
                Sleep(xyz);

                </pre>

                Sollte ein Beep ertönen rufst Du Sleep() definitiv NICHT in einem separatem Thread auf !!

                Gruß Hage

                Comment


                • #9
                  Habs verstanden nur wie übergebe ich der Procedur die ich mit <b>CreateThreat</b> öffne Parameter mit

                  Comment


                  • #10
                    Hi

                    Du solltest nicht die API Funktion nutzen, sondern das Delphi TThread Objekt.

                    <pre>

                    uses Classes;

                    type
                    TTimerThread = class(TThread)
                    private
                    procedure DoAction;
                    protected
                    procedure Execute; override;
                    end;

                    procedure TTimerThread.Execute;
                    begin
                    while not Terminated do
                    begin
                    Sleep(100); // 100 ms
                    if not Terminated then
                    Synchronize(DoAction);
                    end;
                    end;

                    procedure TTimerThread.DoAction;
                    begin
                    // hier Code der periodisch ausgeführt werden soll
                    end;

                    </pre>

                    Gruß Hage

                    Comment


                    • #11
                      Hallo,

                      die Klasse <b>TThread</b> wird in der Delphi-Hilfe beschrieben, und dort finden sich unter der Überschrift "TThread.Suspend" und "TThread.Create" alle gesuchten Informationen. Zitat: "<i>Mit <b>Create</b> erzeugen Sie einen Thread in einer Anwendung. Wenn <b>CreateSuspended</b> den Wert False hat, wird <b>Execute</b> sofort aufgerufen. Andernfalls erfolgt der Aufruf erst nach einem Aufruf von <b>Resume</b></i>". Man muss also Execute niemals direkt aufrufen, das macht TThread automatisch, wenn der Thread ausgeführt werden soll. Durch einen Aufruf von <b>Suspend</b> wird die Ausführung eines Thread temporär unterbrochen. Mit <b>Resume</b> kann die Ausführung anschließend wieder aufgenommen werden.

                      Die TThread-Methode <b>Execute</b> wird im <b>Protected</b>-Abschnitt der Klasse deklariert. Die sich daraus ergebenden Konsequenzen beim Zugriff werden auch in der Delphi-Hilfe aufgeführt ("<i>Ein protected-Element ist innerhalb des Moduls mit der Klassendeklaration und in allen abgeleiteten Klassen (unabhängig davon, in welchem Modul sie deklariert sind) sichtbar. Mit anderen Worten: auf ein protected-Element können alle Methoden einer Klasse zugreifen, die von der Klasse mit der Elementdeklaration abgeleitet ist. Mit diesem Sichtbarkeitsattribut werden also Elemente deklariert, die nur in den Implementierungen abgeleiteter Klassen verwendet werden sollen.</i>").

                      P.S: Nicht umsonst befassen sich über 70 Seiten in meinem Buch <i>Delphi Win32-Lösungen</i> mit dem Thema Threads ;-

                      Comment


                      • #12
                        Hi

                        Genau, ich empfehle Dir (nach Deinen Fragen zu urteilen)

                        1.) kaufe Literatur

                        2.) sauge bei DSP = Delphi Super Page oder Torry=www.torry.ru eine andere Timer Komponente, gibt es dort wie Sand am Meer.

                        Gruß, Hage

                        Comment


                        • #13
                          Wenn du schon so stolz auf dein Buch bist dann verate mir mal den Preis

                          Comment


                          • #14
                            Hallo,

                            alle gesuchten Informationen inkl. Inhaltsverzeichnis und Probe-Kapitel finden sich unter http://www.entwickler.com/buecher/3/teaser.htm

                            Comment

                            Working...
                            X