TTimer , OnTimer event (asynchron/synchron?)



  • Moin zusammen!

    Ich habe hier folgendes Szenario, beim Start meiner Applikation läuft parallel zum Laden eine TProgressBar. Dieser ganze Vorgang dauert etwa 20 Sekunden.
    Parallel zur fortschreitenden Progressbar, starte ich einen TTimer. Das Intervall ist auf 100ms eingestellt.
    Ich zähle u.a. eine Variable hoch, wenn OnTimer aufgerufen wird.

    Nun musste ich feststellen, dass der Timer gar nicht asynchron bzw. als eigener Thread läuft. OnTimer wird nur aufgerufen, wenn ich woanders Application->ProcessMessages() aufrufe.

    Gibt es irgendwie die Möglichkeit den Timer simpel unabhängig von der GUI ablaufen zu lassen?

    Beste Grüße



  • Timer sind intern über Windowsbotschaften realisiert. Wenn Du einen Thread (in diesem Fall wohl der VCL Hauptthread) mit etwas anderem beschäftigst, kann dieser natürlich keine Windowsbotschaften verarbeiten.

    Mit ProcessMessages unterbrichst Du explizit deine Arbeit und verarbeitest die Windows-Botschaften (eben dann auch die mittlerweile aufgelaufenen OnTimer Events).

    Du kannst Dir einen TThread machen und den Timer diesem Thread zuweisen. Dann würde der andere Thread die Nachrichten bekommen und weil er gerade nichts anderes tut ausser auf Nachrichten zu warten, würden diese dann auch nicht verzögert ankommen.

    Eigentlich würde ich aber die "Arbeit" vom VCL Thread in einen Thread auslagern und den Timer so lassen, wie er ist.



  • Hallo

    Nein. TTimer basiert intern auf den Windows-Messages, die von Windows an den Hauptthread gesendet werden.
    Für dein Vorhaben brauchst du TThread.

    bis bald
    akari



  • [quote="akari"]Hallo

    ich glaube du musst as andas modul time anpassen oder so...



  • Hallo

    3 Jahre nach der letzten Antwort etwas völlig überflüssiges zu schreiben, bringt uns auch nicht weiter.

    bis bald
    akari


Log in to reply