IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

QProcess et commande sur l'invite de commandes


Sujet :

Qt

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 74
    Points : 44
    Points
    44
    Par défaut QProcess et commande sur l'invite de commandes
    Bonjour
    j'aimerai démarrer une application à partir de Qt , effectuer un traitement et finalement donner la main au logiciel Qt.
    Le problème que j'ai trouvé c'est lorsque je démarre l'application .exe à l'aide de la commande Qprocess, la fenetre de Qt se bloque, et elle n'exécute pas les autres instructions (voir le code (les instruction en rouge)) . Il se fige sur l'instruction process.execute !!
    voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        QString appli = "application.exe";
        arguments<<"-c"<<"config.e";
        process->execute(appli,arguments);
        int error= init();
        cout<<"error"<<error;
        process->terminate();
        process->waitForFinished(-1);
        cout<<process->pid();
        process->kill();
        cout<<process->pid();
    Merci de votre réponse

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 438
    Points : 43 081
    Points
    43 081
    Par défaut prob qprocess
    D'après la doc, process->execute je cite en traduisant démarre le prog et les arguments dans un nouveau process, attend sa fin et retourne le exitcode. donc ton code ne s"executera qu'après fin du process.

    Il y a 1 fonction startDetached qui à mon avis répond à ton besoin.

    Il y a aussi 1 fonction start mais je na vois pas la différence avec execute.

    Tu peux controler l'état du process avec QProcess:state
    exitcode et existatus te permettent de récuperer le retour du process.

    Avec ça tu devrait t'en sortir.

    Tu as aussi waitForFinished permettant l'attente de la fin du process ou retour au bout d'un délai
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    execute est une fonction statique (tout comme startDetached). Comme le dit la documentation, elle est bloquante. Donc si tu l'exécutes dans ton thread principal, elle bloque toute l'application.

    La fonction que tu cherches, asynchrone et non statique, c'est start().

    En revanche la suite de ton code est bizarre. Déjà, lis le warning de la documentation de waitForFinished(). Et si t'attends indéfiniment la fin, alors le kill après ne sert à rien, soit t'es bloqué pour toujours, soit l'exécution est terminée.

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 438
    Points : 43 081
    Points
    43 081
    Par défaut start/startdetached
    Je ne comprend pas la différence entre start et startdetached, la doc des 2 est un copier-coller est-ce la même chose ?
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    C'est pourtant évident, la différence c'est "Detached". Sans blague. Dans le cas de startDetached(), c'est une fonction statique. Alors que le start() ne l'est pas, on instancie donc un objet QProcess, qui reste lié (attaché) au processus lancé et le suit jusqu'à la fin.

    La documentation des deux explique bien cette différence.

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 438
    Points : 43 081
    Points
    43 081
    Par défaut je suis trompé
    Désolé je me suis trompé, ce que je n'ai pas compris c'est la différence entre start et execute pas entre start et startdetached
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  7. #7
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    Ah bon. Dans ce cas je l'ai déjà expliqué. execute() est synchrone, start() est asynchrone.

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/10/2010, 19h13
  2. Réponses: 3
    Dernier message: 19/11/2008, 21h05
  3. Installer java sur l'invite de commandes
    Par ANOVA dans le forum EDI et Outils pour Java
    Réponses: 2
    Dernier message: 15/12/2007, 19h30
  4. Erreur sur une invite de commande @prompt
    Par poog49 dans le forum Designer
    Réponses: 1
    Dernier message: 16/01/2007, 19h00
  5. [win2000] commandes absentes dans invite de commandes
    Par elghadi_mohamed dans le forum Windows Serveur
    Réponses: 5
    Dernier message: 25/12/2006, 19h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo