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

Python Discussion :

suspension d'une procédure


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 176
    Par défaut suspension d'une procédure
    Bonjour à tous,

    Voici: j'ai créé un programme récursif de résolution de puzzle, que je souhaite pouvoir arrêter quand je le veux et le redémarrer de la même façon. Pour cela j'ai pensé à utiliser une variable globale de ma classe "flag" ainsi que le gestionnaire d'événement de ma fenêtre graphique qui détecte quand l'utilisateur appuie sur un bouton "arrêter". Je souhaite que l'exécution de ma procédure reste suspendue jusqu'à ce que l'utilisateur appuie sur un bouton "reprendre".

    On dispose des 2 procédures suivantes, rattachés à des boutons par la fonction mainloop.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def stop_it():
    "arret de l'animation"
    self.flag =0
     
    def start_it():
    "démarrage de l'animation"
    if self.flag ==0: # pour ne lancer qu'une seule boucle
    self.flag =1


    J'avais bien pensé à quelque chose du genre:
    inséré judicieusement dans la procédure à arrêter, mais sans grand succès... Pouvez-vous m'aider?


    Mathieu

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 176
    Par défaut
    Bien sûr, on souhaite que la procédure à arrêter reparte exactement là où on l'avait laissée, c'est là la difficulté.

  3. #3
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Tu devrais dire en quoi ton essai était "sans grand succès", cela pourrait éclairer sur la nature du pb.

    Imaginons que ce qui ne va pas, c'est que pendant l'exécution de la boucle, le bouton graphique ne marche pas. Il suffit alors de "redonner la main" au graphique par un root.update() ou root.update_idletasks() selon ton code.

    Sinon, pour autant que j'ai compris ton pb, voilà comment tu pourrais faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while True:
        while self.flag==0:
            time.sleep(0.2)  # pour limiter la consommation de ressource
        ...
        # suite
        ...
    Et, bien sûr, il faudra sortir de la boucle "while True:" avec un break.

    Dans cette solution, l'arrêt n'est possible qu'au début de chaque début de la grande boucle while. Si tu veux arrêter à n'importe quel moment, c'est possible, mais c'est plus compliqué.

    Tyrtamos

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 119
    Par défaut
    Bonjour,

    ce que tu présentes n'est pas très clair. Est ce que le calcul pour la résolution est fait dans un autre thread? Si ce n'est pas le cas, il faudrait commencer par ca.
    A l'interieur de ton calcul, tu pourrais tester une variable booleenne _requeststop, et si elle est vraie, faire un wait sur un threading.Event _wait. L'appui sur le bouton arreter mettra _requeststop a vrai et l'appui sur le bouton reprendre le mettra a faux et fera _wait.Set()

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. Transformation de date dans une procédure stockée
    Par bd0606 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/10/2003, 11h31
  3. Réponses: 12
    Dernier message: 27/08/2003, 11h04
  4. Problème avec une procédure stockée
    Par in dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/05/2003, 15h33
  5. Fin de programme dans une procédure
    Par Sinclair dans le forum Langage
    Réponses: 13
    Dernier message: 29/11/2002, 22h30

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