2016-11-16 66 views
0

嗨,大家好,我正在努力阻止線程,我沒有得到任何錯誤,但我的線程不停止。我希望得到一些幫助。當我關閉按鈕時,我有一個按鈕調用我的函數lev,它應該會停止線程。按照下面的代碼部分:如何停止一個線程 - Python 3

exitFlag = 0 

def levt(): 

    print("Executando") 
    while ((app.frames[Acionamento].var.get()==2) and exitFlag==0): 
     print("o thread") 
     t1fvm = time.time() #Tempo final luminária esquerda 
     n1mv = (t1fvm-t1ivm)*0.6 
     global levm 
     levm = levm+n1mv 
     print(levm) 




def lev(): 

    app.frames[Acionamento].esquerdaFrame.vendasFrame.luminaria_esquerdaFramev.label6["text"] = "Luminária A" 
    global exitFlag 
    global thread2 
    thread2 = Thread(target=levt)  
    if GPIO.input(17): 
     GPIO.output(17, GPIO.LOW) 
     app.frames[Acionamento].esquerdaFrame.vendasFrame.luminaria_esquerdaFramev.lev_button["text"]="Desligado" 
     if thread2.isAlive(): 
      exitFlag = 1 

    else: 
     global t1ivm 
     t1ivm = time.time() 
     GPIO.output(17, GPIO.HIGH) 
     app.frames[Acionamento].esquerdaFrame.vendasFrame.luminaria_esquerdaFramev.lev_button["text"]="Ligado" 
     thread2.start() 

回答

0

由於thread2總是與內部lev()新線程發起的,所以if thread2.isAlive()將始終評估爲FalseexitFlag將永遠不會被設置爲1,因此,正在運行的線程會永不停止。

移動thread2 = Thread(target=levt)thread2.start()前行:

def lev(): 
    ... 
    #thread2 = Thread(target=levt) # moved to line before thread2.start() 
    if GPIO.input(17): 
     ... 
    else: 
     ... 
     thread2 = Thread(target=levt) 
     thread2.start() 
+0

感謝ACW,我得到它,解決它。還有一個問題,我如何將秒轉換爲小時:分鐘:秒? – armf1993

+0

'seconds'是'time.time()'返回的值嗎? 「時:分:秒」是指「秒」的時間或經過的時間? – acw1668

+0

time.time()返回秒或太接近?你能舉個例子嗎? – armf1993