PDA

View Full Version : [c/c++] .net : problema redirectstandardoutput


bsummer
03-06-2005, 17:28
Ciao a tutti.
Ho il seguente problema che mi attanaglia da stamane.

Una mia applicazione ne lancia un'altra. Quest'ultima lavora in una semplice shell dos, e manda a video l'output sottoforma di banali stringhe di testo.

Ho la necessità di analizzare, con un parser creato da me, le stringhe prodotte, riga per riga.

Per fare questo ho scelto di usare la classe Process() nel seguente modo:

Process* mp = new Process();
ProcessStartInfo* si= new ProcessStartInfo("programma.exe");
si->UseShellExecute = false;
si->CreateNoWindow= true;
si->RedirectStandardOutput = true;
mp->StartInfo= si;
try{
mp->Start()
} catch(...

La parte appena scritta rappresenta l'inizializzazione e l'avvio del programma.

In un thread a parte, a intervalli regolari di x secondi eseguo questa istruzione:

if (mp->StartInfo->StandardOutput->peek()>0) {
s= mp->StartInfo->StandardOutput->readLine();
}

ove s è una stringa (String*);

E giungiamo finalmente al problema...
Sul buffer dello stream dove viene ridirezionato lo standard output vengono scritti 73 caratteri, non uno di più, anche svuotando il buffer.
Se io faccio partire "programma.exe" da solo, subito questo mi mostra una decina di righe come output a video, mentre se lo faccio partire come processo dalla mia applicazione, loggando l'output come descritto poc'anzi, dopo 3-4 righe non viene letto più nulla dal buffer...(i 73 caratteri, appunto)
Ho provato ad utilizzare readToEnd() per vedere se cambiava qualcosa, ma nulla.
Ho provato a prevenire il totale svuotamento del buffer facendo il controllo sul peek() maggiore di un certo valore (non zero), ma nulla.
Ho cercato la risposta consultando vari siti, ma finora ho trovato solo gente che ha avuto lo stesso problema e nessuna soluzione apparente...
A sto punto non capisco...

Qualcuno sa aiutarmi?