AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

NamedPipes - Status des Buffers

Ein Thema von Neutral General · begonnen am 30. Jan 2015 · letzter Beitrag vom 30. Jan 2015
Antwort Antwort
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

NamedPipes - Status des Buffers

  Alt 30. Jan 2015, 17:29
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?
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.049 Beiträge
 
Delphi 12 Athens
 
#2

AW: NamedPipes - Status des Buffers

  Alt 30. Jan 2015, 18:00
WriteFile blockiert?

Ich dachte das bricht einfach ab und gibt einen passenden Fehlercode zurück, wenn irgendwas nicht ging.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#3

AW: NamedPipes - Status des Buffers

  Alt 30. Jan 2015, 18:44
wenn irgendwas nicht ging.
Es geht doch, bloß nicht jetzt

Du kannst die Pipe mit PIPE_NOWAIT erstellen; das ist aber nicht empfohlen. Außerdem gibt es asynchrones IO (overlapping); das solltest du dir angucken.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: NamedPipes - Status des Buffers

  Alt 30. Jan 2015, 21:23
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.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.049 Beiträge
 
Delphi 12 Athens
 
#5

AW: NamedPipes - Status des Buffers

  Alt 30. Jan 2015, 21:36
Zitat:
PeekNamedPipe function

Copies data from a named or anonymous pipe into a buffer without removing it from the pipe. It also returns information about data in the pipe.
Also direkt die Größe auslesen tut das auch nicht.

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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz