![]() |
JVCL: TJvCreateProcess
Hallo Delphi-Fans,
vielleicht kann mir jemand von euch bei einem Problem helfen. Ich versuche, aus einem Delphiprogramm heraus eine 32-Bit-Konsolenanwendung zu starten und die laufende Ausgabe zurück ins aufrufende Delphiprogramm zu leiten. Ich habe ausser mit TJvCreateProcess() auch schon mit einigen anderen Komponenten (die letzlich alle auf den API-Funktionen CreateProcess() und CreatePipe() beruhen) experimentiert, aber alle zeigen bei bestimmten Konsolenprogrammen (wavegain.exe oder flac.exe (beides zur Audiobearbeitung bzw. Dekodierung)) den Effekt, dass die während der Laufzeit anfallenden Bildschirmausgaben, die man sonst im Konsolenfenster zu sehen bekommt, erst nach Beendigung der externen Applikation komplett übergeben werden. Der entsprechende OnRead-Event wird während der Laufzeit nicht getriggert. Es hilft auch nichts, die Konsolenanwendung mit niedrigster Priorität zu starten. Andere (z.B. lame.exe) hingegen funktionieren wie erwartet. Läßt sich dieses Verhalten irgendwie ändern? Oder gibt's eine Komponente, die das "richtig" macht? -sundance- |
Re: JVCL: TJvCreateProcess
Willkommen bei der DP.
Bei TJvCreateProcess kann man auch den OnRawRead Event implementieren. Soweit ich bei einem Blick in die Sourcen erkenne konnte wird erst ein OnRawRead ausgeloest und dann der Inhalt geparst und als OnRead nochmals gemeldet. Wenn das Programm nicht einfach zeilenweise mit CR LF ausgibt, sondern beispielsweise mit nur CR eine Fortschrittsanzeige realisiert, dann geraet das parsen aus dem Tritt. |
Re: JVCL: TJvCreateProcess
Hallo Robert,
vielen Dank für deine schnelle Antwort. Ich bin mir ziemlich sicher, dass ich den OnRawRead-Event auch beobachtet habe und dass der ebenfalls erst am Schluß zu Zug kam. Außerdem gibt zumindest 'wavegain.exe' seine Zeilen mit ganz normalem CR/LF aus:
Delphi-Quellcode:
Aber ich teste das nochmal und melde mich hier wieder...
Aus dem Quelltext von wavegain.exe:
fprintf(stderr, " %+6.2f dB | %6.0f | %5.2f | %8.0f | %4d | %4d | %s[b]\n[/b]", *track_gain, peak, scale, new_peak, dc_l, dc_r, filename); -sundance- |
Re: JVCL: TJvCreateProcess
Zitat:
Zitat:
|
Re: JVCL: TJvCreateProcess
jbg,
Zitat:
Nachtrag: Ich fürchte, du hattest recht. Habe gerade versucht, unter 4NT mit 'tee' den stderr-Kanal 'abzuzweigen', d.h. gleichzeitig nach stdout und in eine Datei zu schreiben und, was soll ich sagen, erst nachdem wavegain.exe fertig ist, erscheint auf der Konsole der gesamte Text (während z.B. das DIR-Kommando über tee zeilenweise schreibt... -sundance- |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:39 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