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 :

[Aide] récupérer variable d'un thread


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    agent sncf
    Inscrit en
    Mai 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : agent sncf
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2013
    Messages : 12
    Par défaut [Aide] récupérer variable d'un thread
    Bonjour,

    Dans mon programme, j'ai besoin de plusieurs temporisation, du coup je me suis servi des threads. Mais le problème c'est que je n'arrive pas à récupérer les variables qui change dans mon thread, j'ai dû raté une étape. Une de mes temporisations me permet de faire clignoter mes boutons, je pense que si j'arrive à résoudre ce problème, ça devrait aussi régler mes autre temporisations.

    Voici mon code fichier temporisation.py:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def clignotement():
        global etat, continuer
        while continuer:
            etat = 0
            pygame.time.wait(500)
            etat = 1
            pygame.time.wait(500)
     
    cligote = Timer(0.1, clignotement)
    cligote.start()
    Mon programme principal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
        if __name__ == '__main__':
            if temporisation.etat == 0:
    #Bouton d itineraire
                if  IT_RP_4T == "CLI_RP_4T":
                   pygame.display.update(fenetre.blit(Bouton_4T_a, (F_4T, O_RP)))
     
                if IT_RP_JC2 == "CLI_RP_JC2":
                    pygame.display.update(fenetre.blit(Bouton_JC2_DA_a, (F_JC2_DA, O_RP)))
     
            if temporisation.etat == 1:
    #Bouton d itineraire
                if  IT_RP_4T == "CLI_RP_4T":
                   pygame.display.update(fenetre.blit(Bouton_4T_e, (F_4T, O_RP)))
     
                if IT_RP_JC2 == "CLI_RP_JC2":
                    pygame.display.update(fenetre.blit(Bouton_JC2_DA_e, (F_JC2_DA, O_RP)))
    Merci d'avance.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,
    Lorsque pygame.time.wait(500) est appelé, le thread pygame est suspendu 500ms. Vous ecrivez:
    Dans mon programme, j'ai besoin de plusieurs temporisation, du coup je me suis servi des threads.
    d'accord mais si vous appelez pygame.time.wait(500) alors que pygame attend déjà la fin de l'appel précédent (grâce aux threads), ca fait quoi?
    La "temporisation" peut s'exprimer par lancer telle action dans 200ms puis celle ci dans 400ms. Ordonnancer le déclenchement d'actions permet de faire autre chose en attendant. En programmation graphique, il vaut mieux attendre l’arrivée d'un événement qu'attendre que le temps passe.

    Je ne connais pas assez pygame pour être sur que son event-loop ne propose pas déjà une solution prête a l'emploi. Sinon, on peut appeler une fonction qui s'occupe de lancer les actions (via un USEREVENT déclenche par pygame.set_timer). Ou si on a peut d'event, utiliser la possibilité de poster plusieurs USERVENT.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    agent sncf
    Inscrit en
    Mai 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : agent sncf
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2013
    Messages : 12
    Par défaut
    Bonjour,

    Merci pour votre réponse. Par contre je n'ai pas trouver beaucoup de chose sur "event-loop" du coup je me suis rabattu sur le "USEREVENT" mais ne le connaissant pas j'ai adapter un code que j'ai trouver mais ça ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    pygame.time.set_timer(USEREVENT+1, 500)
     
    def tempocli():
        global etat, continuer
        for event in pygame.event.get():
            if event.type == USEREVENT+1:
                if etat == 0:
                    etat = 1
                    return etat
                elif etat == 1:
                    etat = 0
                    return etat
            if event.type == QUIT:
                break
    Ma fonction se lance bien après vérification avec des essais.

    Merci d'avance.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,
    "ca ne marche pas" est un peu trop vague.
    Je suppose que ça signifie que "pygame.time.set_timer(USEREVENT+1, 500)" ne va poster qu'un seul "USEREVENT+1".
    De toutes façons, comme vous ramenez la variable globale "etat" dans le truc, c'est qu'on ne s'est pas compris.
    Essayez de faire marcher le code suivant (fait avec des cut&paste et sans tests, l'important est l'idee):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    def on_blink_off():
                if  IT_RP_4T == "CLI_RP_4T":
                   pygame.display.update(fenetre.blit(Bouton_4T_a, (F_4T, O_RP)))
     
                if IT_RP_JC2 == "CLI_RP_JC2":
                    pygame.display.update(fenetre.blit(Bouton_JC2_DA_a, (F_JC2_DA, O_RP)))
    def on_blink_on():
     
               #Bouton d itineraire
                if  IT_RP_4T == "CLI_RP_4T":
                   pygame.display.update(fenetre.blit(Bouton_4T_e, (F_4T, O_RP)))
     
                if IT_RP_JC2 == "CLI_RP_JC2":
                    pygame.display.update(fenetre.blit(Bouton_JC2_DA_e, (F_JC2_DA, O_RP)))
    BLINK_ON = USEREVENT+1
    BLINK_OFF= USEREVENT+2
     
    def mainloop():
        for event in pygame.event.get():
            if event.type == BLINK_OFF:
               on_blink_off()
               pygame.time.set_timer(BLINK_ON, 500)
            elif event.type == BLINK_ON:
               on_blink_on()
               pygame.time.set_timer(BLINK_OFF, 500)
            elif event.type == QUIT:
                break
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre averti
    Homme Profil pro
    agent sncf
    Inscrit en
    Mai 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : agent sncf
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2013
    Messages : 12
    Par défaut
    Bonjour,

    Merci pour cette aide, j'ai retourner le code mais en vain, à aucun moment je n'ai réussi à le faire marcher.

    Le problème vient de cette portion de code enfin je l'espère:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def mainloop():
        for event in pygame.event.get():
            if event.type == BLINK_OFF:
               on_blink_off()
               pygame.time.set_timer(BLINK_ON, 500)
            elif event.type == BLINK_ON:
               on_blink_on()
               pygame.time.set_timer(BLINK_OFF, 500)
            elif event.type == QUIT:
                break
    J'arrive à bien lancer la fonction, mais je n'arrive pas à obtenir ces conditions de vraie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            if event.type == BLINK_OFF:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    d
            elif event.type == BLINK_ON:
    Malgré mes recherche je n'ai pas trouvé pas trouvé de réponse au problème.

    Merci

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,
    oui c'est de la daube, il faut que je revoie ma copie
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Récupérer variables d'1 <form> et les utiliser dans X
    Par honeyz dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 20/04/2006, 11h39
  2. Récupérer variable d'un document enfant sur doc parent ?
    Par renaud26 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 17/03/2006, 14h22
  3. [SQL*PLUS] Récupérer variable
    Par tonysky dans le forum Oracle
    Réponses: 4
    Dernier message: 15/02/2006, 07h56
  4. [ActionScript] Récupérer variable dans URL
    Par JohnBlatt dans le forum Flash
    Réponses: 2
    Dernier message: 20/07/2005, 10h21
  5. Variable static avec thread
    Par oxor3 dans le forum Threads & Processus
    Réponses: 7
    Dernier message: 27/08/2004, 11h45

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