Entwickler-Ecke
Windows API - Fenster zum Empfang von Messages "zwingen"
SchelmVomElm - Mi 25.07.07 11:50
Titel: Fenster zum Empfang von Messages "zwingen"
Mein Programm empfängt aus einer Dll zyklisch Daten.
Dass heißt die Dll sendet eine Message an das MainForm
dass neue Daten zur Verfügung stehen.
Das MainForm holt Sie ab und teilt der Dll mit dass Sie weiter empfangen soll.
Teilt das MainForm dies nicht der Dll mit hört Sie auf Daten zu sammeln.
Nun tritt folgendes Problem auf:
Ein Fenster (scheint?) keine Messages mehr zu empfangen wenn es zB. verschoben,
skaliert, oder wenn ein Popup Menü geöffnet ist und keine Eingabe getätigt wird.
In diesem Moment empfängt das Fenster nicht die Nachricht dass neue Daten da sind
und teilt der Dll nicht mit dass Sie weiter empfangen soll. Folge: Programm hängt!
Wer weiss hier eine Lösung?
Ich hab schon überlegt statt der Message eine Callback Funktion zu nehmen, aber ich weiß
nicht was passiert wenn diese aufgerufen wird während das Fenster gerade eine andere
Funktion ausführt...
Narses - Mi 25.07.07 13:15
Titel: Re: Fenster zum Empfang von Messages "zwingen"
Moin!
SchelmVomElm hat folgendes geschrieben: |
Ich hab schon überlegt statt der Message eine Callback Funktion zu nehmen, aber ich weiß nicht was passiert wenn diese aufgerufen wird während das Fenster gerade eine andere Funktion ausführt... |
Solange du in der Callback-Funktion die VCL nicht anfasst, sehe ich keine Probleme. ;)
cu
Narses
Reinhard Kern - Mi 25.07.07 14:43
Titel: Re: Fenster zum Empfang von Messages "zwingen"
SchelmVomElm hat folgendes geschrieben: |
Mein Programm empfängt aus einer Dll zyklisch Daten.
Dass heißt die Dll sendet eine Message an das MainForm
dass neue Daten zur Verfügung stehen.
Das MainForm holt Sie ab und teilt der Dll mit dass Sie weiter empfangen soll.
Teilt das MainForm dies nicht der Dll mit hört Sie auf Daten zu sammeln.
Nun tritt folgendes Problem auf:
Ein Fenster (scheint?) keine Messages mehr zu empfangen wenn es zB. verschoben,
skaliert, oder wenn ein Popup Menü geöffnet ist und keine Eingabe getätigt wird.
In diesem Moment empfängt das Fenster nicht die Nachricht dass neue Daten da sind
und teilt der Dll nicht mit dass Sie weiter empfangen soll. Folge: Programm hängt!
Wer weiss hier eine Lösung?
Ich hab schon überlegt statt der Message eine Callback Funktion zu nehmen, aber ich weiß
nicht was passiert wenn diese aufgerufen wird während das Fenster gerade eine andere
Funktion ausführt... |
Hallo,
die sauberste Lösung ist, wenn die Datenverarbeitung überhaupt nicht an eine aktive visuelle Form gebunden ist, ich erstelle dazu in der Regel ein eigenes, nichtvisuelles Objekt, das entweder über einen Timer oft genug aufgerufen wird oder überhaupt einen eigenen Thread benutzt. Dann läuft die Datenbearbeitung sozusagen im Hintergrund.
Beim Timer muss man natürlich dafür sorgen, dass der TimerEvent in einer Messageschleife landet, die nicht blockiert wird, z.B. ein unsichtbares, nichtmodales Fenster ohne sonstige Funktion.
Gruss Reinhard
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!