ich habe ein Problem mit meinem thread: dieser bedient in "definierten" Intervallen einen COM-port und tut dies auch dann noch wenn der port bereits geschlossen wurde. Das ist dann natürlich nicht mehr so schön wie vorher.
Den Code habe ich reduziert, dh es passiert noch etwas mehr, aber ich hoffe alles Wesentliche für mein Problem hier extrahiert zu haben.
Code: Alles auswählen
class SerialThread(threading.Thread):
def __init__(self, Prm):
self.Prm = Prm
self.trace = True
self.lock = threading.Lock()
self.clientEvent = threading.Event()
threading.Thread.__init__(self)
def run(self):
try:
self.client = serial.Serial( port = self.Prm['port'],
baudrate = int(self.Prm['baudrate']),
bytesize = int(self.Prm['bytesize']),
parity = self.Prm['parity'],
stopbits = int(self.Prm['stopbits']),
timeout = int(self.Prm['timeout']))
except:
PyMsgBox.PopUpMsg().dispConfirm("Cannot open serial port " + self.Prm['port'], "Error", 0)
self.clientEvent.set()
while self.trace:
self.lock.acquire()
self.client.write(READ + "\r\n")
time.sleep(19)
line = self.client.readline()
# ... verarbeitet die Zeile
self.lock.release()
time.sleep(float(self.Prm['update']))
def stop(self):
self.trace = False
self.client.close()
def Init(...):
Prm = {'update' : '20'}
thread = SerialThread(Prm)
thread.start()
while not thread.clientEvent.is_set():
pass
return thread
def End(...):
RetDict = thread.stop()
# ... hier werden Init aufgerufen, andere Dinge getan und dann End ausgeführt