• [^] # Re: Re : Chronomètre

    Posté par . En réponse au message Problème d'affichage de chiffres jeu squaro Python. Évalué à 1. Dernière modification le 03 avril 2014 à 21:20.

    Il faut utiliser les threads. C'est une notion avancée qu'on n'aborde pas dans un cours d'introduction, normalement.

    En fait au sein d'un même programme tu peux lancer des fonctions qui seront indépendantes comme si elles étaient dans des programmes différents. La méthode start_new_thread te permet de faire ça pour les programmes en mode console. Souvent les bibliothèques graphiques ont leurs propres méthodes pour faire ça.

    Voici un exemple avec start_new_thread:

    import time
    import thread
    def showTime():
     sec = 0
     min=0
     while 1==1:
     time.sleep(1)
     sec +=1
     if sec == 60:
     min += 1
     sec = 0
     print "\t{0}:{1}".format(min, sec)
    #On lance la fonction dans un thread indépendant
    thread.start_new_thread(showTime, ())
    sec = 0
    min=0
    while 1==1:
     #Les deux sleep fonctionnent dans des thread indépendants
     time.sleep(3)
     sec +=1
     if sec == 60:
     min += 1
     sec = 0
     print "{0}:{1}".format(min, sec)

    Donc quand tu exécutes, tu vois que le programme n'attend pas que showTime se soit terminé pour passer à la suite. C'est très différent de ce que tu aurais obtenu sans la méthode start_new_thread. C'est comme si il y avait deux programmes qui s'exécutaient à leur rythme dans des fenêtres séparées sans se connaître.

    Il y a moyen de simuler ça sans passer par les threads. Il faudrait alors lancer toutes tes méthodes dans la boucle while. C'est intéressant à essayer aussi.