Laden...

Programm hängt beim lesen von StdOut

Erstellt von christof.k vor 18 Jahren Letzter Beitrag vor 18 Jahren 1.636 Views
C
christof.k Themenstarter:in
159 Beiträge seit 2005
vor 18 Jahren
Programm hängt beim lesen von StdOut

Hallo Zusammen,

ich habe ein komisches Problem:

Mein Programm startet einen Command-Line basierten Compiler per Process und leitet die Ausgabe um. Soweit so gut. Dies hat bisher auch immer super funktioniert.
Nun habe ich eine Source-Datei kompiliert, die mehr Fehler als sonst (also größeren StdOut-Buffer) hatte und dabei hängt sich dann mein Programm beim Lesen des Streams auf. Dabei sind es aber nicht immens viele Daten, eher ein paar kB.

Ich denke es könnte damin zusammenhängen, dass dieser Command-Line compiler wieder andere exe-Dateien aufruft, denn ich frage noch den Ausgang einer anderen Datei mit über 200 kB StdOut-Buffer ab und das funktioniert wunderbar.

Gibt es eine Erklärung (und vielleicht Lösung) für dieses Verhalten??

Vielen Dank schonmal
Christof

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo christof.k,

ich habe folgenden Test durchgeführt:

Ein C# Programm, das die Ausgaben einliest, startet ein Perl-Programm.

process.StartInfo.FileName = "perl.exe";
process.StartInfo.Arguments = "output.pl";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;

Das Perl-Programm gibt 100k Text aus, startet ein drittes Programm (per system ()) und gibt noch mal 100k aus. Das dritte Programm (wieder C#) gibt ebenfalls 100k Text aus.

Die 300k Text haben noch nicht mal Zeilenumbrüche enthalten.

Es sind keine Blockierungen aufgetreten.

herbivore

C
christof.k Themenstarter:in
159 Beiträge seit 2005
vor 18 Jahren

Komisch, komisch.....

vielleicht mache ich etwas beim init falsch. Kannst Du mir Dein mini-Beispiel mal posten? Dann vergleiche ich mal, ob es signifikante Unterschiede gibt.

Vielen Dank
Christof

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo christof.k,

in privaten Nachrichten kann man wohl gar keine Dateien anhängen. Naja, dann kommt das Programm halt so zu dir:

herbivore

C
christof.k Themenstarter:in
159 Beiträge seit 2005
vor 18 Jahren

Hallo!

Ich habe Dein Programm mit meinen Parametern ausgeführt, und es hat auch geklappt.
Dann habe ich (wie ich es in meiner Applikation tue) auch stderr umgeleitet und prompt hing sich das Programm dann bereits bei StdOut auf.
Komisch und unverständlich.
Und das komischte ist: Mein StdOut buffer ist eigentlich leer, alle meine Infos kommen per StdErr. Und wenn ich StdOut nicht umleite, erhalte ich alle Infos aus StdErr.
Zusammengefasst heißt dass: StdOut alleine geht, StdErr alleine geht, beide zusammen gehen nicht!

Also irgendwie kapier ich das nicht. Gibt es irgendwo etwas, was ich übersehen habe?

Vielen Dank
Christof