Ich muss mal wieder auf diesen Beitrag zurückkommen.
Ich habe nun einen eigenen thread programmiert. Dieser soll sich um die Kontaktabfrage kümmern.
Die Kontakte sind in der Anlage an Microcontroller angeschlossen. Bei Kontaktveränderung senden diese ein Telegramm über die serielle Schnittstelle an den PC.
Geht auch alles gut.
Nun habe ich diese Auswertung in einen eigenen thread gepackt. Dieser funktioniert auch - solange das Hauptprogramm nichts macht.
Das weiter oben beschriebene Problem tritt auch bei meiner Segmentdrehscheibe auf.
Ich habe mir das folgendermaßen gedacht: Das Hauptprogramm veranlass die Drehscheibe zum umlaufen. Ok. das klappt.
Nun muss es aber warten bis dieser Umlauf abgeschlossen ist.
Die Drehscheibe gibt bei Umlaufende ein Telegramm über den MC dass die Bewegung abgeschlossen ist. Das Signal kommt auch am PC an. (mit HTerminal geprüft).
Nun wieder zum Hauptthread:
Dazu habe ich eine while- schleife geschrieben.
Code: Alles auswählen
while not akt_element^.busy do;
//weiterer Programmcode
Dieses busy-Kriterium soll vom Kontakt-Thread auf false gesetzt werden.
Solange der Kontaktthread alleine läuft geht alles wunderbar, aber sobald ich in die while-Anweisung komme (ein sleep-Befehl bewirkt übrigens das Gleiche) , schein der Kontaktthread blockiert zu sein.
Ich habe im Kontaktthread ein paar Meldungen installiert, diese funktionieren plötzlich auch nicht mehr. Im Thread-Kontrollfenster von Lazarus steht aber bei beiden threads: "running".
Übrigens: der Kontaktthread muss immer laufen, denn auch die Gleisfreimeldung läuft über diesen.
Vielleicht könnt ihr mir helfen?
Gruß Fritz