スレッドの実行を中断する(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に持たせておく。