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