Named Pipe
-
Hallo,
ich suche in Windows eine Möglichkeit festzustellen ob Daten in einer Named-Pipe anliegen ohne sie auszulesen.
So soll zb ein Event ausgelöst werden, sobald Daten zum auslesen vorhanden sind.
Ich möchte gleichzeitig auf den Seriellen Port sowie die Named-Pipe warten. Treffen nun in einem der Beiden Schnittstellen Daten ein sollen diese ausgewertet werden. Das verhalten soll dem select() unter Unix ähnlich sein.
Beim ComPort kann dies ja mit WaitCommEvent erreicht werden. Jedoch suche ich solch ein Verhalten auch für eine Named-Pipe. Wie ist so etwas zu realisieren?
Vielen Dank...
-
Tja du kannst es mit CreateEvent und WaitForSingleObject machen.
-
Hallo,
Schau dir bitte diese Seite an: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ipc/base/synchronous_and_overlapped_input_and_output.asp
-
Hallo...
danke für die Tips. Die Seiten kannte ich jedoch schon.
Vielleicht sollte ich das Problem nochmal besser erklären:
Ich starte für beide ein asynchrones ReadFile() mit einem Event in der overlap Struktur. Jetzt werte ich die Daten der Pipe aus und Sende sie an den Com-Port. Jedoch läuft währenddessen ja noch mein asynchrones ReadFile() auf die Com Schnittstelle.
Will ich jetzt abermals ein asnychrones ReadFile starten um die Antwort zu erhalten, kann es ja sein, dass inzwischen schon Daten aus dem Com-Port gelesen wurden. Diese wären dann gelöscht.
ICh habe nun versucht zu prüfen ob das Event der ComPort overlap struktur gesetzt wurde und somit Daten eingegangen sind. Dies habe ich mit einem WaitForSingleObejct() mit einem Timeout von 1 versucht.
Jedoch war das Event fast immer gesetzt obwohl der ComPort keine Daten geliefert hatte.
Auch habe ich versucht die asynchronen Lesezugriffe mit einem CancelIo() abzubrechen bevor ich eines neuen starte. Das hatte aber keine Wirkung.Gibt es noch eine andere Möglichkeit festzustellen ob ein Event gesetzt wurde ohne es zu beeinflussen?
Oder ist ein komplett anderes vorgehen vielleicht die bessere Alternative?Vielleicht versuche ich einmal in einem anderen Thread synchron von der Com zu lesen und dann ein Event oder Mutex zu signalisieren. Jedoch wär mir eine andere Lösung lieber.
vielen dank
mfg