ReadFile blockiert bei Lesen aus leerer Pipe
-
Hallo wenn ich gemäß dieser Anleitung aus einer Pipe lesen möchte und entweder nie Daten drin waren, oder bereits alle Daten gelesen sind, blockiert das Programm.
Wie verhindert man sowas?
-
Indem du ReadFile mit einer OVERLAPPED Struktur aufrufst (und bei CreateFile das Flag FILE_FLAG_OVERLAPPED angibst). Dann wird der Aufruf asynchron durchgeführt. Über einen Thread kannst du dich dann informieren lassen, wenn Daten vorliegen.
-
Die Pipe blockiert solange, bis wieder von der Gegenseite hineingeschrieben wurden. Du kannst dir mit PeekNamedPipe die Anzahl an Bytes im Puffer der Pipe besorgen.
-
OK danke, funktionert.
Jetzt habe ich noch eine andere Frage: bei GetFileSize steht drin, dass man diese Funktion nicht auf Pipes anwenden soll, bei GetFileSizeEx steht es nicht mehr drin. Ich habe jetzt mal ein wenig experimentiert und GetFileSize funktioniert scheinbar nach dem ersten Lesezugriff, GetFileSizeEx scheinbar sofort. Kann ich also auch GetFileSizeEx nehmen?