![]() |
NamedPipes - Status des Buffers
Hallo,
Ich habe hier 2 Programme (A und B) die via NamedPipes miteinander kommunizieren. Angenommen die Buffergröße beträg 120 Bytes. Nun schreibt A 100 Bytes in die Pipe, die B auslesen könnte. Bevor B aber die Daten liest, möchte A weitere 100 Bytes senden. Problem: In diesem Fall würde WriteFile blockieren solange B seine Daten nicht ausliest, da der Buffer für die Schreiboperation nicht ausreicht und WriteFile solange blockiert bis genug Speicher frei ist (B also in dem Fall mindestens 80 Bytes gelesen hat). Ich möchte nun also bevor ich mit A Daten sende wissen wie viel Platz B noch in seinem Buffer hat und falls nicht genug Platz vorhanden ist erst gar nicht WriteFile aufrufen. Gibt es da etwas? |
AW: NamedPipes - Status des Buffers
WriteFile blockiert?
Ich dachte das bricht einfach ab und gibt einen passenden Fehlercode zurück, wenn irgendwas nicht ging. :stupid: |
AW: NamedPipes - Status des Buffers
Zitat:
Du kannst die Pipe mit ![]() ![]() |
AW: NamedPipes - Status des Buffers
Ja ich kenne PIPE_NOWAIT und overlapped IO.
Asynchron geht leider nicht weil ich in einer Methode schreiben und lesen muss. Ich brauche also noch vor dem Ende der Methode eine Antwort. Für ReadFile habe ich PeekNamedPipe benutzt. Damit kann ich einfach schauen ob und wie viel im Input-Buffer drin ist. Ich hatte gehofft das wäre für die andere Richtung auch auf irgendeine Weise möglich. |
AW: NamedPipes - Status des Buffers
Zitat:
Nun andersrum geht das leider nicht. > Daten in den Puffer schreiben, bis er voll ist, mitzählen wieviel das war und dann alles schnell wieder entfernen ... nur blöd, daß dabei die andere Seite auf das geschriebene zugreifen könnte, bevor man es entfernt hat. Beim Lesen wieviel jetzt da ist, ist es egal, ob mittendrin noch mehr im Puffer landet, weil man das in diesem Durchlauf garnicht mitbekommt. PS: Auch bei Asynchron kann man warten ... nur eben mit der Möglichkeit das Warten auch abbrechen zu können. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz