スレッドの実行を中断する(2)
昨日の続き。どうやるか考えた。単純にbreakでforループを抜ける。
...(略) self.Btn4.Bind(wx.EVT_BUTTON, self.DoAnim) self.Btn5.Bind(wx.EVT_BUTTON, self.StopAnim) def DoAnim(self, event): thread.start_new_thread(self.Run2, ()) def StopAnim(self, event): self.bflag = True def Run2(self): self.bflag = False for i in xrange(1, Util.anim_file_num+1): path = os.path.join(Util.appl_boot_path, "anim%s.png" % i) bmp = wx.Image(path).Scale(600,600).ConvertToBitmap() self.bmpFlag.SetBitmap(bmp) time.sleep(0.2) if self.bflag : break
Btn5を押すとbflagが真になり、ループから脱出する。
再び、Btn4を押すと途中から再生が始まるようにするには、Run2をちょっと変える。
... self.xint = 1 #どこか前の方で定義しておく。 ... def Run2(self): self.bflag = False for i in xrange(self.xint, Util.anim_file_num+1): path = os.path.join(Util.appl_boot_path, "anim%s.png" % i) bmp = wx.Image(path).Scale(600,600).ConvertToBitmap() self.bmpFlag.SetBitmap(bmp) time.sleep(0.2) if self.bflag: self.xint = i break
何番目の画像で止まったかという情報をxintに持たせておく。