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