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):
|
||||
|
||||
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 :
|
||||
@ -278,16 +318,21 @@ class MainWindow2( MainWindow):
|
||||
self.esp32_serial.write(sendStr.encode())
|
||||
self.esp32_serial.flushInput()
|
||||
|
||||
|
||||
|
||||
class ThC(QtCore.QThread):
|
||||
class WorkerKilledException(Exception):
|
||||
pass
|
||||
|
||||
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()
|
||||
if inp[0] == 62 and inp[-3] == 60 :
|
||||
inp = inp[1:-3]
|
||||
y = float(inp.decode('utf-8'))
|
||||
self.datasignal.emit(cnt,y)
|
||||
|
||||
time.sleep(0.001)
|
||||
try:
|
||||
if inp[0] == 62 and inp[-3] == 60 :
|
||||
inp = inp[1:-3]
|
||||
y = float(inp.decode('utf-8'))
|
||||
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()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user