Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
E-P-S

Anmeldungsdatum: 16.09.2004 Beiträge: 500 Wohnort: Neuruppin
|
Verfasst am: 22.04.2010, 01:19 Titel: Funktion bremst Programm aus - SetTimer Problem |
|
|
Hi zusammen,
ich hab ein recht abstraktes Problem zu welchem ich auch leider keinen direkten Code posten kann - wäre zuviel, aber ich versuch es mal zu erklären.
Folgende Gegebenheiten: Ein Fenster mit TreeView. Der Inhalt des TreeView soll ständig aktualisiert werden. Daher habe ich per SetTimer auf eine Funktion verzweigt (CallBack). Der Timer kommt alle 100ms und weil das Update des TreeView unterschiedlich lange dauern kann (von 3ms bis mehrere Sekunden), speichere ich ob gerade ein Update ausgeführt wird. Wenn noch nicht, führe ich es durch, wenn ja, kehre ich einfach zurück.
Das Problem ist, das es wie gesagt stellenweise lange dauert das Update durchzuführen. Während dieser Zeit ist mein Fenster jedoch blockiert. Das heißt ich kann es nicht verschieben oder z.B. die ScrollBar des TreeView betätigen. Es "ruckt" sozusagen ganz heftig.
Um das besser nachzuvollziehen habe ich in die CallBack Funktion des Timers einfach mal ein SLEEP reingebaut und kehre danach direkt zurück, so das es sozusagen "gewollt hakt" - was es auch tut.
Ich kann nichts dagegen unternehmen das das Update so lange dauert - das liegt schlichtweg an der Operation die ich da ausführe, aber:
FRAGE: wieso blockiert das Update den Rest des Programms - also das Fenster usw. Sollten die Fensterevents nicht trotzdem ausgelöst werden?
Ich hoffe jemand kann mir weiterhelfen und bedanke mich schonmal im voraus. _________________ Man kann sich öfter als zweimal im Leben halb tot lachen. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 22.04.2010, 01:26 Titel: |
|
|
Passiert das aktualisieren des Treeviews in einem separaten Thread? Wenn nicht, ist es meines Wissens nach völlig egal, ob du ein Callback verwendest oder selbst die Funktion dauernd neu aufrufst - in beiden Fällen sollte die Funktion das Programm blockieren. Die Aktualisierung in einen eigenen Thread zu packen könnte da helfen. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
E-P-S

Anmeldungsdatum: 16.09.2004 Beiträge: 500 Wohnort: Neuruppin
|
Verfasst am: 22.04.2010, 01:38 Titel: |
|
|
Vielen Dank erstmal - das war mir gar nicht bewusst. Ich dachte die Messages an mein Fenster würden trotzdem ankommen.
Nun mit Thread Programmierung hatte ich bis dato noch nicht so viel am Hut. Aber ich werde mal in der Richtung suchen. _________________ Man kann sich öfter als zweimal im Leben halb tot lachen. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 22.04.2010, 11:16 Titel: |
|
|
E-P-S hat Folgendes geschrieben: | Vielen Dank erstmal - das war mir gar nicht bewusst. Ich dachte die Messages an mein Fenster würden trotzdem ankommen. | Tun sie ja auch, aber nur weil die Post morgens in deinem Briefkasten landet, heißt das ja nicht, dass du sofort dort hinstürmst und sie abholst, obwohl du ja grade unter der Dusche stehst.
Zitat: | Nun mit Thread Programmierung hatte ich bis dato noch nicht so viel am Hut. Aber ich werde mal in der Richtung suchen. | Die Artikel zu ThreadCreate und co. im Freebasic-Portal geben eine ganz gute Einführung dazu. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
|