#1 Le 25/08/2008, à 16:36
- crtx_omar
[Linux-Qt4.4]QProcess ne se termine pas!
Bonjour,
je suis entrain de developper un petit programme sous linux (Kubuntu 8.04) avec Qt4.4..Code::blocks v8.02 (avec qt-prebuild) en mode root.
a un moment je fais appel a cette fonction..
void connexion::utilisateur()
{
donnees_connexion->start("cat",QStringList() << "/etc/ppp/chap-secrets",QIODevice::ReadOnly);
donnees_connexion->waitForFinished(200);
donnees_connexion->terminate();
qDebug() << "etat processus de recuperation de user+pass : " << donnees_connexion->state();
}
et j'ai une autre fonction qui verifie chaque seconde (avec QTimer) le status du processus
void connexion::verifier etat()
{
qDebug() << "etat processus de recuperation de user+pass : " << donnees_connexion->state();
}
je recupere bien le contenu du fichier avec readAllStandardOutpu().
Mon probleme c'est que :
Dans la console avec le qDebug après l'instruction terminate() (j'ai meme remplacer par kill() ) j'ai toujours le N°2 qui s'affiche (i.e : QProcess::Running!!)..et j'ai le meme resultat tout au long du programme (avec la focntion verif_etat()), c'est a dire que le processus ne se termine pas...
et si je remplace l'appel start par execute, le programme fige....
dans le fichier connexion.h j'ai :
private :
QProcess *donnees_connexion
quelqu'un peu m'aider svp..?
merci d'avance
Dernière modification par crtx_omar (Le 25/08/2008, à 16:47)
Hors ligne
#2 Le 25/08/2008, à 16:59
- rniamo
Re : [Linux-Qt4.4]QProcess ne se termine pas!
je n'ai jamais fait de QT mais au vue de cette page :
http://doc.trolltech.com/4.1/qprocess.html
start et execute ne sont pas équivalent, execute te renvoie directement le code de retour alors que start ne fait que commencer ... Donc si tu vait quelquechose de fini ça peut durer ...
J'ai mal compris ton problème ?
< Quelques un des mes programmes | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
\ ^__^
\ (o o)\_______
(___)\ )\
Hors ligne
#3 Le 25/08/2008, à 17:04
- crtx_omar
Re : [Linux-Qt4.4]QProcess ne se termine pas!
Mon probleme c'est que le processus que j'execute (donnees_connexion) ne se termine jamais (sauf si je quitte l'application), Or je fait bien un appel a terminate() qui devrait l'arreter!!
Ps: j'ai bien lu la doc du QProcess
Dernière modification par crtx_omar (Le 25/08/2008, à 17:04)
Hors ligne
#4 Le 25/08/2008, à 17:12
- rniamo
Re : [Linux-Qt4.4]QProcess ne se termine pas!
tu pourrais mettre le code (enfin une version lite) et la commande de compile (pour la libraire) ?
T'as essayé sans le terminate, j'ai compris que execute se terminer "tout seul" :
int QProcess::execute ( const QString & program, const QStringList & arguments ) [static]
Starts the program program with the arguments arguments in a new process, waits for it to finish, and then returns the exit code of the process. Any data the new process writes to the console is forwarded to the calling process.
< Quelques un des mes programmes | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
\ ^__^
\ (o o)\_______
(___)\ )\
Hors ligne
#5 Le 25/08/2008, à 17:36
- crtx_omar
Re : [Linux-Qt4.4]QProcess ne se termine pas!
Non, execute(), bloque le programme appelant jusqu'a la terminaison du processus...moi quand je remplace start() par execute(), le programme principal ne reprend plus la main, car le processus ne se termine pas, mon programme reste en attente, et c'est bizzard car normalement l'execution de la commande "cat" ne dure que quelques fractions de secondes!
et j'ai utiliser terminate(), et kill() pour forcer l'arret du processus, mais ca n'a pas marcher!
Hors ligne
#6 Le 25/08/2008, à 17:49
- Link31
Re : [Linux-Qt4.4]QProcess ne se termine pas!
donnees_connexion->start("cat",QStringList() << "/etc/ppp/chap-secrets",QIODevice::ReadOnly);
Tu ne penses pas qu'un simple std::ifstream ifs("/etc/ppp/chap-secrets"); serait plus simple ?
Dernière modification par Link31 (Le 25/08/2008, à 17:49)
Hors ligne
#7 Le 25/08/2008, à 17:55
- crtx_omar
Re : [Linux-Qt4.4]QProcess ne se termine pas!
Oui c'est fort possible , je vais tester ca...merci, mais je veux bien savoir pourquoi mon processus ne se termine pas, meme avec kill() et terminate() :(
Dernière modification par crtx_omar (Le 25/08/2008, à 17:57)
Hors ligne
#8 Le 25/08/2008, à 20:33
- obiwankennedy
Re : [Linux-Qt4.4]QProcess ne se termine pas!
Une lecture de fichier plus Qt4:
QFile file("/etc/ppp/chap-secrets");
QTextStream in(&file);
while(!is.atEnd())
{
QString a= in.readLine();
}
sinon essaie d'obtenir le pid de process, voit ce qu'il fait et tue le manuellement via la ligne de commande pour voir comme ton programme réagit.
Dernière modification par obiwankennedy (Le 25/08/2008, à 20:39)
Dans mes logiciels, j'écris ton nom.
SGNGD: SvgGd is Not GD
Rolisteam
Hors ligne
#9 Le 25/08/2008, à 20:57
- crtx_omar
Re : [Linux-Qt4.4]QProcess ne se termine pas!
@obiwankennedy : merci, j'ai reglé ca, meme avec ifstream ca a marché...
moi j'ai voulu utiliser le QProcess, parcequ'il me permet de reccuperer le message d'erreur si l'execution de la commande echoue, via readAllStandardError(), pour l'afficher dans mon programme..par exemple ca arrive qu'il m'affiche "Permission non accordé"..etc
merci encore
Hors ligne