Signale und Threads
-
Moin Leute,
ich hab ein etwas blödes Problem.
Also 1.
ich habe einen Thread und eine Funktion, in der Funktion rufe ich den
Thread auf. Der Thread spricht über einen seriellen Anschluss eine
Anlage an und fordert sie auf, mir Daten zu senden.
Nun ist es nur so, das der Thread die Daten irgendwie nicht
empfangen kann, nur einzelne Dateien, aber nicht das Gesamte Datenpacket.Solange die Daten gesendet werden, warte ich in der Funktion in
einer while Schleife darauf und wenn die Daten angekommen sind,
wird eine Variable gesetzt und die while Schleife verlassen.
Nun ist es aber so, das ich aus der while Schleife nicht mehr rauskomme.Da dachte ich mir, das evtl mit Signalen zu lösen,
wenn die Daten angekommen sind, sende ich ein Signal
an die Funktion und verlasse danach die while Schleife.Was meint ihr dazu ??
2. Wieso kann ich in dem Thread keine Windows Fensterchen aufrufen ??
Zum Beispiel die: MessageDlg("Error", mtError, TMsgDlgButtons() << mbOK, 0 )
wenn er das Fenster dann öffnen soll, hängt er sich komplett auf...Danke schonmal im vor raus
-
budili schrieb:
Solange die Daten gesendet werden, warte ich in der Funktion in
einer while Schleife darauf und wenn die Daten angekommen sind,
wird eine Variable gesetzt und die while Schleife verlassen.
Nun ist es aber so, das ich aus der while Schleife nicht mehr rauskomme.vielleicht solltest du in die 'while schleife' ein 'Sleep(0)' einbauen, damit der andere thread auch genug rechenzeit bekommt?
budili schrieb:
Da dachte ich mir, das evtl mit Signalen zu lösen,
wenn die Daten angekommen sind, sende ich ein Signal
an die Funktion und verlasse danach die while Schleife.so'n signal könnteste z.b. mit 'ner globalen variablen machen, also in der schleife ständig die variable abfragen...
btw: ich weiss ja nicht wie du das machst, aber eigentlich brauchste keine polling-techniken bei der seriellen. windoze hat schon 'ne pufferung eingebaut und apis umd daten zu senden/empfangen...
-
hm was bringt das sleep( 0 ) ??
also mit der Variable hab ich das auch so gemacht,
also ne globale Variable und die wird in der while Schleife
permanent geprüft. Aber irgendwie klappt das net so ganz....Ich glaube der Thread läuft irgendwie nicht parallel zu
dem Hauptprogramm....Weiß auch nicht so genau woran das liegt.