Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Funktion bremst Programm aus - SetTimer Problem

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
E-P-S



Anmeldungsdatum: 16.09.2004
Beiträge: 500
Wohnort: Neuruppin

BeitragVerfasst am: 22.04.2010, 01:19    Titel: Funktion bremst Programm aus - SetTimer Problem Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 22.04.2010, 01:26    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
E-P-S



Anmeldungsdatum: 16.09.2004
Beiträge: 500
Wohnort: Neuruppin

BeitragVerfasst am: 22.04.2010, 01:38    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 22.04.2010, 11:16    Titel: Antworten mit Zitat

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. zwinkern

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz