Hey Forumler, ich habe ein mehr oder weniger kleines Problem: es geht wie der Titel vermuten lässt um die geliebte RS232 und Windows.... Unter Linux tut bereits alles wies soll. Also es geht um folgendes: In einem extra thread soll immer im hintergund die Daten gelesen werden. Szenario 1: Ich öffne die Schnittstelle mittels CreateFile ohne dabei Flags zu setzen. in besagtem thread nutze ich nun ReadFile zum auslesen. Der dadurch wird der Thread wie gewünscht so lange blockiert, bis die angegebene anzahl Bytes empfangen wurde oder der eingestellte Timeout kommt. Das problem ist jetzt, dass ein zweiter Thread so wies aussieht nicht schreiben kann (WriteFile) solange der erste sich in ReadFile befindet. (der Write wird so lange ebenfals blockert) Und das ist natürlich doof schließlich will ich ja meine daten sofort rausjagen. Auf der Suche nach einer Lösung bin ich auf folgendes gestoßen Szenario 2: ich öffne mit dem FILE_FLAG_OVERLAPPED und nun beginnen die unklarheiten. Es fängt damit an, dass der Thread nicht mehr blockiert wird. Er soll aber blockiert werden, schließlich soll ja nicht unnötig die CPU belastet werden. Aus dem ganzen gedönz was in der MSDN dazu steht bin ich leider noch nicht so schlau geworden. gerade spiele ich mit der Methode ReadFileEx rum, und übergeb der eine calback methode - die wird allerdings nie aufgerufen und blocken tut auch nix. Dank hat mir jemand ne lösung? besten Dank Matze
Hier steht alles was du braucht http://msdn.microsoft.com/en-us/library/windows/desktop/ms686358(v=vs.85).aspx
Grobes Vorgehen: - Du erstellt ein Event (CreateEvent) und übergibst das Handle der OVERLAPPED Struktur. - Lege mit WaitCommEvent fest, auf was dein thread warten soll, - Dann wartest du mit WaiforSingleObject auf dieses Event.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.