En Sun, 27 May 2007 09:07:36 -0300, momobear <[EMAIL PROTECTED]> escribió:
>> Instead of extending join(), write a specific method to signal the >> quitEvent or just let the caller signal it. And I don't see in this >> example why do you need two different events (one on the thread, another >> on the service controller), a single event would suffice. > > I don't think a single event is enought, since I think the event > python created and windows event are not same kind of event. They are not the same object, of course (altough the threading.Event object relies eventually on a mutex implemented using CreateEvent). But in this case both can be successfully used; of course, having the Python object a more "pythonic" interfase (not a surprise!), it's easier to use. The same example modified using only a threading.Event object (and a few messages to verify how it runs): import threading from win32api import OutputDebugString as ODS class workingthread(threading.Thread): def __init__(self, quitEvent): self.quitEvent = quitEvent self.waitTime = 1 threading.Thread.__init__(self) def run(self): while not self.quitEvent.isSet(): ODS("Running...\n") self.quitEvent.wait(self.waitTime) ODS("Exit run.\n") import win32serviceutil import win32event class testTime(win32serviceutil.ServiceFramework): _svc_name_ = "testTime" _svc_display_name_ = "testTime" _svc_deps_ = ["EventLog"] def __init__(self, args): win32serviceutil.ServiceFramework.__init__(self, args) self.hWaitStop = threading.Event() self.thread = workingthread(self.hWaitStop) def SvcStop(self): self.hWaitStop.set() def SvcDoRun(self): self.thread.start() self.hWaitStop.wait() self.thread.join() if __name__ == '__main__': win32serviceutil.HandleCommandLine(testTime) -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list