HILFE! QProcess "verschluckt" input!

Alles rund um die Programmierung mit Qt
Antworten
jizz
Beiträge: 4
Registriert: 23. Februar 2008 15:33

HILFE! QProcess "verschluckt" input!

Beitrag von jizz »

Hallo!

Ich habe ein Problem, dass mich bald zum verzweifeln bringt.
Mein Programm gibt output in einem CSV ähnlichen Format. Die erste Spalte ist hierbei die Zeilennummer, welche fortlaufend sind. Es können mitunter mehrere hundert Zeilen sein.

So ungefähr sieht das ganze dann aus:
1;asdjflah jölasdhkflöka;hengkehgl;gahelgaslghle
2; ajlödhlöaghl löaghalö;aöghelögh;agöjklkweghlöa
3;asdjflah jölasdhkflöka;hengkehgl;gahelgaslghle
4; ajlödhlöaghl löaghalö;aöghelögh;agöjklkweghlöa
5;asdjflah jölasdhkflöka;hengkehgl;gahelgaslghle
6; ajlödhlöaghl löaghalö;aöghelögh;agöjklkweghlöa

Ich lese aus, wenn ein readyRead()-Signal emittiert wird, zum Auslesen selbst verwende ich readAll().
Mein Problem ist, dass QProcess einfach mal ein paar hundert Zeilen verschluckt! Ich gebe den Output direkt nachdem ich ihn in in eine QString Variable eingelesen habe per qDebug aus, und die genannten Daten fehlen einfach. Manchmal ist es so, dass er das Ende des Outputs abschneidet, also die letzten Zeilen fehlen; manchmal lässt er aber auch in der Mitte irgendwo ein paar hundert Zeilen rausfallen.
In dem Fall, dass er am Ende was abschneidet habe ich gedacht, dass readAll() vllt. nicht alles ausließt; aber bytesAvailable() ist auch false, wenn man es im Anschluss ans auslesen ausfruft.

Woran kann das liegen?

Danke für eure Hilfe!
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Ein reproduzierbares Codebeispiel wäre nicht schlecht.
jizz
Beiträge: 4
Registriert: 23. Februar 2008 15:33

Beitrag von jizz »

Ich hab das ganze schon auf ein minimum reduziert, genau das was ich oben geschrieben hatte.
InputProcess : public QProcess

Code: Alles auswählen

void InputProcess::dataparser() [slot]
{
	buffer.append ( readAll() );
        qDebug(buffer.toLatin1());
}
im c-tor
connect ( this, SIGNAL ( readyRead() ), SLOT ( dataparser() ) );
naja, es kommt eben nicht alles an bei readAll() !! Das muss eigentlich irgendwie am QProcess liegen, oder?

ps: stderr hab ich auch schon ausgegeben, hat keinen inhalt!
jizz
Beiträge: 4
Registriert: 23. Februar 2008 15:33

Beitrag von jizz »

Weiß denn niemand weiter?
Ich suche jetzt schon ewig und habe nirgends etwas gefunden! Ist es vllt. ein QT-Bug? Gibts hierzu irgendwo Infos?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Hier kann im Bedarfsfall alle gemeldeten Bugs von Qt nachsehen...
jizz
Beiträge: 4
Registriert: 23. Februar 2008 15:33

Beitrag von jizz »

Mhmm... etwas passendes habe ich nicht gefunden.

Ich werde das ganze jetzt nochmal für Windows kompilieren und dort probieren.
Meint ihr ich soll melden? Auch wenn das Problem unter Windows auch auftritt (ich denke dass es dann wohl doch eher ein Fehler auf meiner Seite sein könnte)?
Ich habe das alles jetzt so lange überprüft, an meiner Implementierung sollte eigentlich nichts fehlen....
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Ich hab jetzt 20.000 Zeilen über QProcess ausgegeben (seq 1 20000) und konnte keine Fehler feststellen...
moviemax
Beiträge: 56
Registriert: 10. März 2008 09:49
Wohnort: München

Beitrag von moviemax »

Das thma hier ist schon älter aber scheinbar noch ungelöst.
Ich denke dein Problem liegt am Zeichensatz bzw. irgendwelchen steuerzeichen. Ich würde an deiner stelle mal was anderes wie latin1
nehmen.

gruß moviemax
Antworten