THreads unter threadpool

This commit is contained in:
jens 2022-11-03 18:20:26 +01:00
parent 19ab015728
commit c505a49392

View File

@ -8,7 +8,7 @@ import pyqtgraph as pg
class MainWindow2( MainWindow):
leftsignal = QtCore.pyqtSignal(float)
#leftsignal = QtCore.pyqtSignal(float)
def __init__(self):
super(MainWindow2,self).__init__()
@ -48,7 +48,7 @@ class MainWindow2( MainWindow):
self.ui.checkBox_3.stateChanged.connect(self.clickedBox3)
self.ui.pushButton_3.clicked.connect(self.sendRheoHome)
self.ui.pushButton_4.clicked.connect(self.sendRheoInject)
self.leftsignal.connect(self.setwhatsleft)
#self.leftsignal.connect(self.setwhatsleft)
### Link zur Doku
#self.webEngineView.setUrl(QtCore.QUrl("file:///C:/Users/jens/ownCloud/www/jfs/git2022/jfsPoseidon/test.html"))
@ -57,23 +57,39 @@ class MainWindow2( MainWindow):
file_path = 'file:///'+file_path
self.ui.webEngineView.setUrl(QtCore.QUrl(file_path))
### init GUI
#ESP32
self.ui.start_btn.setEnabled(False)
self.ui.stop_btn.setEnabled(False)
self.ui.closeRheo_btn.setEnabled(False)
self.ui.checkBox.setEnabled(False)
self.ui.lineEdit.setEnabled(False)
#Rheo
self.ui.pushButton.setEnabled(True)
self.ui.pushButton_2.setEnabled(False)
self.ui.checkBox_3.setEnabled(False)
self.ui.pushButton_3.setEnabled(False)
self.ui.pushButton_4.setEnabled(False)
### ESP32
def setFrequency(self):
s = self.ui.lineEdit.text()
cmd='o'+str(s)+'\n'
thread = Thread(self.sendToEsp32, cmd)
thread.finished.connect(lambda:self.thread_finished(thread))
thread.start()
thread.signals.finished.connect(lambda:self.thread_finished(thread))
self.threadpool.start(thread)
def sendToEsp32(self, sendStr):
print(f" sending {sendStr}")
self.esp32_serial.write(sendStr.encode('utf-8'))
self.esp32_serial.flushInput()
def clickedBox(self,state):
if state == QtCore.Qt.Checked:
print('checkes')
self.threadx[2] =ThC_2(parent=None,port = self.esp32_serial)
self.threadx[2].start()
#self.threadx[2] =ThC_2(parent=None,port = self.esp32_serial)
#self.threadx[2].start()
self.threadx[2] = ThC_2(port = self.esp32_serial)
self.threadpool.start(self.threadx[2])
else:
print('no')
self.threadx[2].stop()
@ -89,20 +105,30 @@ class MainWindow2( MainWindow):
def startesp32(self):
self.threadx[1] = ThC(parent=None,index=1,port = self.esp32_serial,base=self.timeBase)
self.threadx[1].start()
self.threadx[1].datasignal.connect(self.updateData)
self.clearPlot()
self.threadx[1] = ThC(index=1,port = self.esp32_serial,base=self.timeBase)
#self.threadx[1].start()
self.threadpool.start(self.threadx[1])
self.threadx[1].signals.datasignal.connect(self.updateData)
self.ui.start_btn.setEnabled(False)
self.ui.stop_btn.setEnabled(True)
self.ui.checkBox.setEnabled(True)
self.ui.comboBox_tb.setEnabled(False)
def stopesp32(self):
self.threadx[1].stop()
self.ui.start_btn.setEnabled(True)
self.ui.stop_btn.setEnabled(False)
self.ui.comboBox_tb.setEnabled(True)
def setTimeBase(self):
self.timeBase=int(self.ui.comboBox_tb.currentText())
def connectRheo(self):
self.rheo_port = self.ui.comboBox.currentText()
self.statusBar().showMessage("You clicked CONNECT TO Rheo Ventil")
@ -118,14 +144,15 @@ class MainWindow2( MainWindow):
self.rheo_serial.bytesize = serial.EIGHTBITS
self.rheo_serial.timeout = 1
self.rheo_serial.open()
# self.ui.closeRheo_btn.setEnabled(True)
# self.ui.openRheo_btn.setEnabled(False)
# self.ui.start_btn.setEnabled(True)
# self.ui.stop_btn.setEnabled(False)
# self.ui.connect_BTN.setEnabled(False)
self.ui.pushButton.setEnabled(False)
self.ui.pushButton_2.setEnabled(True)
self.ui.checkBox_3.setEnabled(True)
self.ui.checkBox_3.setCheckState(False)
self.ui.pushButton_3.setEnabled(True)
self.ui.pushButton_4.setEnabled(True)
time.sleep(1)
self.statusBar().showMessage("Successfully connected to Rheo board.")
self.getFromRheo()
except:
self.statusBar().showMessage("Cannot connect to board. Try again..")
@ -138,6 +165,11 @@ class MainWindow2( MainWindow):
print("Disconnecting from board..")
time.sleep(0.1)
self.rheo_serial.close()
self.ui.pushButton.setEnabled(True)
self.ui.pushButton_2.setEnabled(False)
self.ui.checkBox_3.setEnabled(False)
self.ui.pushButton_3.setEnabled(False)
self.ui.pushButton_4.setEnabled(False)
print("Board has been disconnected")
def clickedBox3(self,state):
@ -170,8 +202,8 @@ class MainWindow2( MainWindow):
def sendToRheo(self,cmd):
thread = Thread(self.sendRheo, cmd)
thread.finished.connect(lambda:self.thread_finished(thread))
thread.start()
thread.signals.finished.connect(lambda:self.thread_finished(thread))
self.threadpool.start(thread)
def setwhatsleft(self,xx):
#print (f'that left {xx} ')
@ -190,19 +222,24 @@ class MainWindow2( MainWindow):
#self.leftsignal.emit(float(inp))
def getFromRheo(self):
thread = Thread(self.getRheoVolume)
thread.finished.connect(lambda:self.thread_finished(thread))
thread.start()
cmd = ""
thread = Thread(self.getRheoVolume,cmd)
thread.signals.finished.connect(lambda:self.thread_finished(thread))
thread.signals.result.connect(self.setwhatsleft)
self.threadpool.start(thread)
def getRheoVolume(self):
def getRheoVolume(self,cmd):
time.sleep(1)
self.rheo_serial.flushOutput()
self.rheo_serial.flushInput()
cmd = str(5)+'\r\n'
self.rheo_serial.write(cmd.encode('utf-8'))
time.sleep(1)
inp = self.rheo_serial.readline().decode('utf-8')
print(inp)
self.leftsignal.emit(float(inp))
inp = inp.rstrip()
print(f" >{inp}<")
#inp = 200
return inp
@ -226,7 +263,8 @@ class MainWindow2( MainWindow):
self.ui.openRheo_btn.setEnabled(False)
self.ui.start_btn.setEnabled(True)
self.ui.stop_btn.setEnabled(False)
self.ui.checkBox.setEnabled(True)
self.ui.lineEdit.setEnabled(True)
# self.ui.connect_BTN.setEnabled(False)
time.sleep(1)
self.statusBar().showMessage("Successfully connected to esp32 board.")
@ -249,6 +287,8 @@ class MainWindow2( MainWindow):
self.ui.closeRheo_btn.setEnabled(False)
self.ui.start_btn.setEnabled(False)
self.ui.stop_btn.setEnabled(False)
self.ui.checkBox.setEnabled(False)
self.ui.lineEdit.setEnabled(False)
def checkForStopFlow(self):
if self.checkForStopFlow :
@ -279,15 +319,20 @@ class MainWindow2( MainWindow):
self.esp32_serial.flushInput()
class WorkerKilledException(Exception):
pass
class ThC(QtCore.QThread):
class ThC_Signals(QtCore.QObject):
datasignal = QtCore.pyqtSignal(int,float)
def __init__(self,parent=None,port=None,index=0,base=100):
super(ThC, self).__init__(parent)
class ThC(QtCore.QRunnable):
#datasignal = QtCore.pyqtSignal(int,float)
def __init__(self,port=None,index=0,base=100):
super().__init__()
self.index = index
self.is_running = True
self.port = port
self.base = base
self.signals = ThC_Signals()
def run(self):
print(f"Thread {self.index} started")
self.port.flushOutput()
@ -299,20 +344,24 @@ class ThC(QtCore.QThread):
while True:
cnt+=1
inp = self.port.readline()
try:
if inp[0] == 62 and inp[-3] == 60 :
inp = inp[1:-3]
y = float(inp.decode('utf-8'))
self.datasignal.emit(cnt,y)
self.signals.datasignal.emit(cnt,y)
except IndexError:
pass
time.sleep(0.001)
if self.is_running==False:
raise WorkerKilledException
def stop(self):
self.is_running=False
print(f"Thread {self.index} stopped")
self.terminate()
#self.terminate()
class ThC_2(QtCore.QThread):
def __init__(self,parent=None,port=None):
super(ThC_2,self).__init__(parent)
class ThC_2(QtCore.QRunnable):
def __init__(self,port=None):
super().__init__()
self.is_running = True
self.port=port
def run(self):
@ -324,10 +373,12 @@ class ThC_2(QtCore.QThread):
print(cmd)
self.port.write(cmd.encode('utf-8'))
time.sleep(1)
if self.is_running==False:
raise WorkerKilledException
def stop(self):
self.is_running=False
print(f'Thread ThC-2 stopped')
self.terminate()