Bonjour,

J'ai crée une class tempo mais lorsque je veux générer une interruption dans le main, le programme Main s'arrête un certain temps sur la méthode Join()
J'ai l'impression que le thread continu son itération sur la boucle FOR alors que je force la variable "i" à la valeur de la fin de la boucle
Qui a une idée ?

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import threading
import time

stop_threads = False

class Tempo (threading.Thread):
    # Parametres: preset => duree , 
                # base => base de temps (0.1s ou 1s), 
                # mode => TON ou TOF
    def __init__(self, preset, base, mode):
        threading.Thread.__init__(self)
        self.preset = preset
        self.base = base
        self.mode = mode

    def run(self):
        #if self.base == 1:
        #   self.preset = self.preset * 10
        if (self.mode == "TOF"):
            self.etat = True
        if (self.mode == "TON"):
            self.etat = False
            
        if stop_threads: 
            i = self.preset        
        for i in range(0, self.preset):
            time.sleep(self.base)
   
        if (self.mode == "TOF"):
            self.etat = False
        if (self.mode == "TON"):
            self.etat = True

T1 = Tempo(10,0.1,"TON")   # (10 x base=0.1s) = 1s retard enclenchement
T1.start()

T2 = Tempo(6,0.5,"TOF")   # (3 x base=0,5s) = 3s retard au declenchement
T2.start()                

for i in range(0, 20):
    print("programme ", i)
    if T1.etat:
        print ("T1 done")
        T1.etat = False 
        # activation sortie 
    if T2.etat:
        print ("T2 actif")
        # activation sortie 
    else:
        print ("T2 done")  
        # desactivation sortie 
    if T1.is_alive():
        print("T1 is actif")   
    if (i == 9 and T1.is_alive()):
       print ("Kill T1 demande") 
       stop_threads = True    
       T1.join()  
       stop_threads = False 
       print('thread T1 killed') 
    if (i == 7 ):  
       print ("relance T1") 
       T1 = Tempo(10,1,"TON")   # (10 x base=1s) = 10s retard enclenchement
       T1.start()
    time.sleep(1)