I am new to threading and python. Currently I am working on a GUI app
that will be a frontend to CLI client.

I want to invoke a method of the class from GUI and run it in the
thread. That works well, the problems is I dont know how can I stop
this operation, thread if the user would like to stop/cancel it.

Here is the code:

.
.
.

class ScanThread:
    def __init__(self, txtbox, para):
        self.para = para
        self.txtbox = txtbox
        #print "Init"

    def Start(self):
        self.keepGoing = self.running = True
        thread.start_new_thread(self.Run, ())
        #print "Start"

    def Stop(self):
        self.keepGoing = False
        #print "Stop"

    def IsRunning(self):
        return self.running
        #print "IsRunning"

    def Run(self):
        if self.keepGoing:
                obj=tool.sanner(self.para,self.txtbox);

                obj.scan()
                obj.attack()
                #time.sleep(1)

        self.running = False
        #print "Run set to false"


.
.
.

 def do_Scan(self, event): # wxGlade: MyFrame.<event_handler>
        #print "Event handler `do_Scan' not implemented"
        self.threads = []
        val = self.text_ctrl_1.GetValue()
        box = self.text_ctrl_2;
        self.threads.append(ScanThread(box,val))
        for t in self.threads:
            t.Start()
        self.Scan.Enable(False)
        self.Stop.Enable(True)
        self.frame_1_statusbar.SetStatusText("Scanning")
        #event.Skip()


 def do_Stop(self, event): # wxGlade: MyFrame.<event_handler>
        #print "Event handler `do_Stop' not implemented"

        busy = wx.BusyInfo("One moment please, waiting for threads to
die...")
        wx.Yield()

        for t in self.threads:
            t.Stop()

        running = 1

        while running:
            running = 0

            for t in self.threads:
                running = running + t.IsRunning()

            time.sleep(0.1)
        #self.Destroy()
        #event.Skip()

do_Stop doesn't stop the Thread. Works well if I put the simple code
in the thread (i.e printing text etc), but with CLI class code I am
using, it simply doesn't respond.

Any help and explanation or code sample GREATLY appreciated.

Do I have to rewrite class I am using (CLI client) to work with
threads to make this happen ????

Thanks,
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to