[Projet logiciel scan] Problème de timing et traitement de données
Bonjour à tous,
J'ai développé un projet de scan pour une imprimante avec QtCreator et QtDesigner.
Mon interface graphique est mon objet mainwindow, je lance mes commandes par l'objet com_periph.
Je rencontre un problème de crash ou de non traitement des données lors d'une action de scan.
Mon problème principale est que je ne connais pas la fréquence de répétition du signal readyReadStandardOutput() présent dans la boucle while.
De ce fait, j'ai peur que le traitement fait en slot ne soit pas assez rapide avant qu'un autre signal/slot soit créé pour la deuxième fois.
Avez-vous déjà rencontré ce problème et comment faire pour le résoudre ! ?
Voici le code associé :
communication_peripherique.cpp :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| void communication_peripherique::scan(QStringList list_argu,QString nameoffile){
//QProcess process;
process = new QProcess(); // obligation pour utiliser process dans mainwindow
process->start("scanimage",list_argu);
process->setReadChannel(QProcess::StandardOutput);
process->setReadChannel(QProcess::StandardError);
//connect(&pingProcess, SIGNAL(readyReadStandardOutput()), this, SLOT(readData()));
//cout << process->processId() << endl;
while(process->waitForReadyRead())
{
//qDebug() << process->readAllStandardOutput();
emit readyReadStandardOutput();
//qDebug() << process->readAll();
}
process->waitForFinished(-1); // 10s
scan_output.append(process->readAllStandardOutput());
// Output the data
qDebug("Done!");
QFile file(nameoffile);
file.open(QIODevice::WriteOnly);
file.write(scan_output);
file.close();
process->close();
//RESET
scan_output.clear();
} |
mainwindow.cpp :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| void MainWindow::scan_maj_progression() {
scan_progression.append(com_periph->process->readAllStandardError());
//output example
// "Progress: 33.1%\rProgress: 33.2%\rProgress: 33.3%\rProgress: 33.4%\r"
// "33.4"
// ""
// ""
index=0;
index_1=0;
max=0;
min=0;
if (scan_progression.isEmpty() == false) {
for (index=0; index < scan_progression.size(); index++){
if (scan_progression.at(index) == ' ') {min=index;}
if (scan_progression.at(index) == '%') {max=index;}
}
for (index_1=0; index_1 < scan_progression.size(); index_1++){
if (index_1 > min && index_1 < max) {
scan_progression_1.append(scan_progression.at(index_1));
}
}
//
test = scan_progression_1.lastIndexOf(QChar('.'));
scan_progression_2 = scan_progression_1.left(test);
progress = scan_progression_2.toInt(&ok,10);
//qDebug() << progress;
ui->scan_progression->setValue(progress);
}
scan_progression.clear();
scan_progression_1.clear();
scan_progression_2.clear();
} |
mainwindow.h :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| QByteArray scan_progression;
QString scan_progression_1;
QString scan_progression_2;
int index = 0;
int index_1 = 0;
int progress=0;
int min =0;
int max =0;
int test;
bool ok; |
Si vous avez des idées n'hésitez pas.
Merci par avance.