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

MFC Discussion :

Problème création et destruction de processus.


Sujet :

MFC

  1. #1
    Membre régulier Avatar de loupdeau
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 125
    Points : 79
    Points
    79
    Par défaut Problème création et destruction de processus.
    Salut,

    Je dispose d'une classe CCommand avec entre autre les fonctions suivantes :
    execute() -> executer un processus
    stop() -> stopper ce processus

    Mon problème:
    je voudrais que quand le processus tourne, qu'il ne sa passe plus rien avant que le processus soit terminer d'où un WaitForSingleObject( pi.hProcess, INFINITE ); dans la fonction execute().
    Seulement je voudrais aussi commander l'arret du processus à tout moment avec la fonction stop().

    Le processus est créé avec CreateProcess, la fonction stop() est celle donnée par la FAQ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void CPerforceCommand::stop()
    {
     PostThreadMessage(pi.dwThreadId, WM_CLOSE, 0, 0);
     WaitForSingleObject(pi.hProcess, 2000);
     
     DWORD dwExitCode = 0;
     GetExitCodeProcess(pi.hProcess, &dwExitCode);
     if(dwExitCode == STILL_ACTIVE) //process toujours présent ?
     {
      // en dernier recours forcé à la fermeture du process avec un code d’erreur à zéro pour l’exemple
      TerminateProcess(pi.hProcess, 0);                                                  
     }                                                 
    }
    Actuellement si je fait :

    MaCommand.execute();
    MaCommand.stop();

    stop() n'a lieu que quand MaCommand.execute(); est fini. ( Ce qui est d'une utilité remarquable... )

    : Comment faire pour interompre l'exécution de MaCommand.execute() ?

    Merci

  2. #2
    Membre régulier Avatar de loupdeau
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 125
    Points : 79
    Points
    79
    Par défaut
    Je viens d'arriver à quelque chose qui fonctionne

    Créer un thread où l'on execute : MaCommand.execute()
    Dans l'application principale : MaCommand.stop()
    le processus est stoppé.

    Problème:
    Un des processus que j'execute est un fichier batch qui lui meme va executer d'autre fichier batch.
    Quand je fais MaCommand.stop() la fenetre d'exécution du fichier batch "père" se ferme normalement, mais pas celles des "fils".

    : Comment faire pour commander l'arret de ces batch fils ???

  3. #3
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 703
    Points
    10 703
    Billets dans le blog
    3
    Par défaut
    Quel est ton code de execute() ? Apparement il ne rend pas la main tant que le programme lancé ne s'est pas terminé, ce qui n'est pas normal si tu utilises CreateProcess, mais l'est si tu utilises system().
    Pour tuer les fils de tes fils, c'est pas évident.
    Le plus simple serait de fermer la console ouverte et partagée par tout le monde. Si les prog sont bien codés ça devrait tout terminer proprement.

  4. #4
    Membre régulier Avatar de loupdeau
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 125
    Points : 79
    Points
    79
    Par défaut
    Le code de execute() c'est celui de la FAQ dans Comment attendre la fin d’exécution d’un processus ?
    http://c.developpez.com/faq/vc/?page...cessWaitingEnd

    Quand le programme tourne normalement, tout se finit bien, chaque fenetre se ferme etc...
    Juste dans le cas où l'utilisateur décide d'annuler l'exécution, toutes ne se ferme pas...

  5. #5
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 703
    Points
    10 703
    Billets dans le blog
    3
    Par défaut
    Ah ben oui c'est normal, y'a le WaitForSingleObject dedans, c'est lui qui bloque tout tant que le processus ne s'est pas terminé. Il te suffit de le déplacer ailleurs que dans execute() pour ne pas avoir à gérer un thread.
    Donc ton .bat s'execute dans une fenêtre console, qui porte normalement son nom.
    Tu peux tenter de récupérer un handle dessus avec FindWindow, et de la fermer. Normalement, ça devrait tout tuer.

  6. #6
    Membre régulier Avatar de loupdeau
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 125
    Points : 79
    Points
    79
    Par défaut
    Okidoki


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Coût de création et destruction de thread
    Par camboui dans le forum Windows
    Réponses: 41
    Dernier message: 02/06/2005, 12h36
  2. problème création de process
    Par skaii dans le forum MFC
    Réponses: 6
    Dernier message: 01/06/2005, 17h24
  3. .htaccess problème création sous windows
    Par Leviathan_72 dans le forum Apache
    Réponses: 2
    Dernier message: 18/05/2005, 20h29
  4. Problèmes création de procédures et de triggers
    Par missllyss dans le forum SQL
    Réponses: 2
    Dernier message: 06/11/2003, 10h42
  5. Problème création de DLL
    Par monsieur.voie.lactee dans le forum C++Builder
    Réponses: 4
    Dernier message: 12/08/2003, 16h56

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