Je viens de sortir avec ma façon de terminer un fil, mais je ne sais pas pourquoi ça ne marche pas. Est-ce que quelqu'un pourrait m'aider s'il vous plaît?Comment se fait-il que cette façon de terminer un thread ne fonctionne pas?
Voici mon exemple de code:
import wx
import thread
import time
import threading
class TestFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, parent = None, id = -1, title = "Testing", pos=(350, 110), size=(490, 200), style=wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.MINIMIZE_BOX)
self.panel = wx.Panel(self)
self.stop = False
self.StartButton = wx.Button(parent = self.panel, id = -1, label = "Start", pos = (110, 17), size = (50, 20))
self.MultiLine = wx.TextCtrl(parent = self.panel, id = -1, pos = (38, 70), size = (410, 90), style = wx.TE_MULTILINE|wx.TE_READONLY|wx.TE_AUTO_URL)
self.Bind(wx.EVT_BUTTON, self.OnStart, self.StartButton)
self.Bind(wx.EVT_CLOSE, self.OnClose)
def OnStart(self, event):
self.StartButton.Disable()
self.NewThread = threading.Thread(target = self.LongRunning)
self.NewThread.start()
def OnClose(self, event):
self.stop = True
BusyBox = wx.BusyInfo("Just a moment please!", self)
wx.Yield()
while True:
try:
if not self.NewThread.isAlive():
self.Destroy()
break
time.sleep(0.5)
except:
self.Destroy()
break
def LongRunning(self):
Counter = 1
while True:
time.sleep(2)
print "Hello, ", Counter
self.MultiLine.AppendText("hello, " + str(Counter) + "\n") #If you comment out this line, everything works fine. Why can't I update the fame after I hit the close button?
Counter = Counter + 1
if self.stop:
break
class TestApp(wx.App):
def OnInit(self):
self.TestFrame = TestFrame()
self.TestFrame.Show()
self.SetTopWindow(self.TestFrame)
return True
def main():
App = TestApp(redirect = False)
App.MainLoop()
if __name__ == "__main__":
main()
Comme vous pouvez le voir dans mon code, il y a une boucle infinie dans le fil, ce que je dis le fil à faire est de sortir de la boucle une fois que je clique sur la fin bouton. Mais le problème est, chaque fois que je clique sur le bouton de fermeture, il semble que le code bloqué à self.MultiLine.AppendText("hello, " + str(Counter) + "\n")
ligne, je ne sais pas pourquoi. Quelqu'un peut-il aider?
'sinon self.NewThread.isAlive():' Quelle version de python utilisez-vous? 2,5? Vous devriez d'abord mettre à jour votre version de python! –
Je suis déjà sur python 2.7 – Shane