Thema: Delphi Readfile bleibt hängen

Einzelnen Beitrag anzeigen

amokk

Registriert seit: 11. Mai 2011
5 Beiträge
 
#8

AW: Readfile bleibt hängen

  Alt 13. Mai 2011, 13:12
Ok, geht doch nicht.

Folgendes:
Delphi-Quellcode:
 repeat
      SysUtils.Win32Check(GetExitCodeProcess(PI.hProcess, ExitCode));
      PeekNamedPipe(ReadStdOut, Buffer, BufferSize, @Bread, @Avail, nil);
      if (Bread <> 0) then
      begin
        if (BufferSize < Avail) then
        begin
          BufferSize := Avail;
          ReallocMem(Buffer, BufferSize);
        end; {end if}
        FillChar(Buffer^, BufferSize, #0);
        ReadFile(ReadStdOut, Buffer^, BufferSize, Bread, nil);
        Str := Last;
        I := 0;
        while (I < Bread) do
        begin
          case Buffer^[I] of
            #0: inc(I);
            #10:
              begin
                inc(I);
                AStrings.Add(Str);
                Str := '';
              end; {end #10}
            #13:
              begin
                inc(I);
                if (I < Bread) and (Buffer^[I] = #10) then
                  inc(I);
                AStrings.Add(Str);
                Str := '';
              end; {end #13}
          else
            begin
              Str := Str + Buffer^[I];
              inc(I);
            end; {end else}
          end; {end case}
        end; {end while}
        Last := Str;
      end; {end if}
      Sleep(1);
      Application.ProcessMessages;
    until (ExitCode <> STILL_ACTIVE);
Hier existiert eine Endlosschleife. Habe es nun in einem anderen Programmstand ausprobiert. Liegt diesmal zwar nicht am Readfile, doch Bread bleibt immer 0. Buffer ist voll mit #0 und ExitCode bleibt ständig auf STILL_ACTIVE bzw. 259. Irgendwelche Vorschläge? :/

Edit: Hinzuzufügen wäre noch, dass sich am Befehl, den ich ausführe, NICHTS verändert hat.
Edit2: bin am verzweifeln ;o Habe mal spaßeshalber jede Pipe kontrolliert... Alle 4 (NewStdIn,NewStdOut,ReadStdOut,WriteStdIn) sind leer. oO

Geändert von amokk (13. Mai 2011 um 13:57 Uhr)
  Mit Zitat antworten Zitat