Registriert seit: 26. Mai 2004
3.159 Beiträge
|
AW: Timer-Frage
26. Apr 2011, 18:57
Hey,
das Problem, welches du hast ist folgendes: dein Programm hat einen Thread (="Mainthread") und in diesem Thread läuft quasi alles ab. Windows ist, wie du vielleicht schon weiß, Nachrichten-basiert, d.h. bei einem Klick wird eine Nachricht an das Programm geschickt, welches diese dann an den Button weiterleitet. Genauso läuft das auch mit dem Neuzeichnen, Drag & Drop und sonstigen Aktionen. Diese Nachrichten werden aber erst dann abgearbeitet, wenn der Haupthread eben Zeit dafür hat. Da hat er natürlich nicht, wenn der Thread deine lange Methode abarbeitet. Daher reagiert dein Programm auch nicht mehr, jedenfalls so lange nicht mehr, bis die Methode eben beendet ist.
Das Application.ProcessMessages macht folgendes: es schaut nach, ob aktuell Nachrichten vorhanden sind, die abgearbeitet werden sollten, unterbricht quasi die aktuelle Methode und arbeitet dann eben die Nachrichten ab. Dies führt dann aber dazu, dass die eigentliche Ausführungsdauer noch etwas länger ist, da zwischendurch ja noch was anderes gemacht wird.
Daher ist es sinnvoll sich hier Threads anzuschauen, da diese wirklich parallel zum Mainthread laufen und den Mainthread nicht behindern oder blockieren -- außer man will, dass das so ist. Schau dich hier im Forum mal zum Thema um, du wirst massig Threads, auch zu deinem Problem finden.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
|