2017-08-10 17 views
-1

我有2個功能需要根據用戶設置相互調用。也就是說,如果用戶重複開啓,只需要繼續前進,直到手動停止,我有一個按鈕。我怎樣才能做到這一點,而不會導致崩潰程序的無限循環錯誤?如何在Python中循環2個函數?

def T1_Timer(list): 
    msg = list[0] 
    global t1 
    T1_List = list 
    t1 = threading.Timer(MultiTimer2Settings.T1_Time, msg) 
    while t1.is_alive(): 
     if not t1.is_alive(): 
      return 
     else: 
      time.sleep(1) 
    Parent.SendTwitchMessage(msg) 
    T1_List.pop(0) 
    return T1_List 

def DoRun1(): 
    T1_List1 = [] 
    T1_List2 = [] 
    while not StopPressed: 
     T1_List1 = CheckList1(T1_List2) 
     T1_List2 = T1_Timer(T1_List1) 
    return 
StopPressed = False 
def StopButton(): 
    global StopPressed 
    StopPressed = True 
    return 
def CheckList1(T1_List=[]): 
    global t1 
    t1 = threading.Timer(MultiTimer2Settings.T1_Time, "") 
    if not t1.is_alive() and len(T1_List) <= 0: 
     if MultiTimer2Settings.T1M1_Enabled: 
      T1_List.append(MultiTimer2Settings.T1M1) 
     if MultiTimer2Settings.T1M2_Enabled: 
      T1_List.append(MultiTimer2Settings.T1M2) 
     if MultiTimer2Settings.T1M3_Enabled: 
      T1_List.append(MultiTimer2Settings.T1M3) 
     if MultiTimer2Settings.T1M4_Enabled: 
      T1_List.append(MultiTimer2Settings.T1M4) 
     if MultiTimer2Settings.T1M5_Enabled: 
      T1_List.append(MultiTimer2Settings.T1M5) 
    return T1_List 
+0

無限循環不會導致崩潰。無限遞歸。 – Barmar

+0

相互遞歸併使用結束條件。 –

回答

0

只需使用一個while循環:

stopButtonPressed = False 
var1 = <initial value> 
while not stopButtonPressed: 
    var2 = function1(var1) 
    var1 = function2(var2) 

取而代之的每個函數調用,另外,他們應該返回,他們將傳遞給其他函數的值。然後你可以把它們放入變量中,並在連續的調用中傳遞它們。

+0

你在這裏擁有它的方式你有1個函數連續調用其他2個函數,但它們需要來回傳遞變量,所以我不太確定如何實現它。 – Elmseeker

+0

你的函數不返回任何東西,所以你需要通過什麼? – Barmar

+0

@Elmseeker您是否考慮過使用隊列來協調您的線程,而不是從另一個函數調用一個函數? – lbrindze

0

像這樣

Break = 0 

Function1(): 
    test = 12 
    print test 
    return 

Function1(): 
    test1 = 13 
    print test2 
    return 

while Break < 15: 
    Break += 1 
    Function1() 
    Function2() 

使用一個功能不會因此中環做,這是最簡單的選擇

嘗試運行它調用另一個函數!