Forum: PC-Programmierung C# Serielle Schnittstelle im Hintergrund arbeiten lassen


von Marcus Schlinn (Gast)


Lesenswert?

Guten Abend...!

Für eine Anwendung mit einem WinCE Betriebssystem benötige ich eine 
grafische Oberfläche und eine serielle Schnittstelle für Ein- und 
Ausgabe Parameter.

Jetzt möchte ich gerne die serielle Schnittstelle im Hintergrund laufen 
lassen und diese autark von meiner grafischen Oberfläche betreiben.

Jetzt meine Frage: Was ist die beste Lösung den Kommunikationsweg 
zwischen der seriellen Schnittstelle und der grafischen Oberfläche 
miteinander zu verknüpfen? Ich möchte gerne zwei unabhängige 
"Programmteile" haben!

In anderen Programmiersprachen wie Linux kann man eine "Named Pipe" 
verwenden. Da ich aber noch kaum Erfahrung mit WinCE habe, wäre es gut 
wenn mir jemand das nötige Background Wissen vermittelt.

Besten Dank im Voraus !

von Christian R. (supachris)


Lesenswert?

Der Thread ist dein Freund. Und dann über Messages oder Events 
untereinander kommunizieren.

von sniper (Gast)


Lesenswert?

Unter WinCE gibt es das Prinzip der Point-To-Point Message Queues.
Es eignet sich dazu, verschiedene Prozesse miteinander kommunizieren
zu lassen.

...Das ist nicht erforderlich, wenn man RS232 Daten einlesen und auf
einem Display ausgeben möchte.

Du könntest Folgendes in Erwägung ziehen:

1.
Serielle Schnittstelle mit CreateFile öffnen

2.
Mit FileIoControl Baudrate, Timeouts usw. setzen

3.
einen Thread starten (CreateThread)

4.
Im Thread
1
while (notTerminating)
2
{
3
   //...
4
   ReadFile
5
   //...
6
}

aufrufen. ReadFile kehrt immer zurück, wenn Daten auf dem Com Port
ankommen. Nun könntest du dem Rest der Applikation signalisieren, dass 
Daten angekommen sind - entweder per Event, per Message oder per 
Callback.

Für kleinere Applikationen würde ich persönlich einen Callback nehmen 
und die entsprechenden Datenstrukturen per CriticalSection schützen.

Tip:
Besondere Sorgfalt ist beim Beenden der Applikation notwendig.
ReadFile zurückkehren lassen, Thread beenden, warten bis Thread
tatsächlich beendet ist, Com Port schließen.

von Marcus Schlinn (Gast)


Lesenswert?

Hallo !
Danke für Eure Einträge. Ich werde jetzt versuchen eure Vorschläge 
erfolgreich umzusetzen. Sollte jemand noch weitere Beiträge zu diesem 
Thema haben, würde es mich freuen wenn er diese noch mit in Forum 
schreibt.

Besten Dank im Voraus !

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.