通过两天的爆改,将之前单线程的串口工具改成多线程,实际测试,感觉响应速度变化不大,有兴趣的朋友可以对比一下。
import configparser
import time
import datetime
from PyQt5 import QtWidgets
from PyQt5.QtGui import QTextCursor
from PyQt5.QtWidgets import QApplication, QMessageBox
import sys
import os
from uartToolWindow import Ui_Form
from PyQt5.QtCore import QTimer,QObject,pyqtSignal,QThread
import crc
import re
from uart_tool_thread import UartToolThreadClass
class uart_window(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.ui = Ui_Form()
self.ui.setupUi(self)
self.windowInit()
self.cfg_init()
self.connectInit()
self.tool_thread = UartToolThreadClass()
self.child_thread = QThread()
self.tool_thread.moveToThread(self.child_thread)
self.child_thread.start()
self.tool_thread.startSignal.connect(self.tool_thread.toolInit)
self.tool_thread.startSignal.emit()
self.tool_thread.openComSignal.connect(self.tool_thread.openCom)
self.tool_thread.offComSignal.connect(self.tool_thread.offCom)
self.tool_thread.sendSignal.connect(self.tool_thread.sendData)
self.tool_thread.errSignal.connect(self.windowTs)
self.tool_thread.showOffUartSignal.connect(self.openButtonShowChange)
# self.tool_thread.showRevDataSignal.connect(self.receive_data)
self.tool_thread.time_flush_timer.timeout.connect(self.timeFlush)
self.tool_thread.showComSignal.connect(self.tool_thread.tsearchCom)
self.tool_thread.loop_send_timer.timeout.connect(self.send_Data)
self.tool_thread.tool_receive_timer.timeout.connect(self.receive_data)
self.tool_thread.find_com_timer.timeout.connect(self.searchCom)
self.tool_thread.find_com_timer.start(1000)
self.tool_thread.time_flush_timer.start(1000)
print("main_thread",QThread.currentThread())
def windowTs(self,item):
QMessageBox.critical(item)
return None
def openButtonShowChange(self,item):
self.ui.pushButton_open.setText(item)
def loop_send(self):
if self.ui.checkBox_Sendinterval.isChecked():
if self.ui.textEdit.toPlainText() == "":
QMessageBox.critical(self, "提示", '发送内容为空!')
self.ui.checkBox_Sendinterval.setChecked(False)
return None
else:
if self.ui.lineEdit_intervalValue.text() == "":
QMessageBox.critical(self,"提示",'请填入发送间隔,单位为毫秒!')
return None
else:
self.ui.pushButton_4.setEnabled(False)
intv = int(self.ui.lineEdit_intervalValue.text())
if self.ui.lineEdit_intervalValue.text().isdigit() and intv > 0:
self.tool_thread.loop_send_timer.start(intv)
else:
QMessageBox.critical(self,'提示',"正确的阿拉伯数字")
return None
else:
self.ui.pushButton_4.setEnabled(True)
self.tool_thread.loop_send_timer.stop()
def timeFlush(self):
current_time = time.strftime("%Y-%m-%d %X", time.localtime())
self.ui.label_14.setText(" " + current_time)
def get_com_name(self):
com = self.ui.comboBox_Com.currentText()
com = com.split(":")[0].strip()
return com
def openXclose_Com(self):
if self.ui.pushButton_open.text() == "打开串口" and self.ui.comboBox_Com.currentText() != "无串口" :
self.ui.pushButton_open.setText("关闭串口")
self.tool_thread.find_com_timer.stop()
com_name = self.get_com_name()
band = self.ui.comboBox_Bate.currentText()
data_bit = self.ui.comboBox_DataBit.currentText()
check_bit = self.ui.comboBox_CheckBit.currentText()
stop_bit = self.ui.comboBox_StopBit.currentText()
self.tool_thread.dic_item['com'] = com_name
self.tool_thread.dic_item['band'] = band
self.tool_thread.dic_item['data_bit'] = data_bit
self.tool_thread.dic_item['check_bit'] = check_bit
self.tool_thread.dic_item['stop_bit'] = stop_bit
print(self.tool_thread.dic_item)
self.tool_thread.openComSignal.emit()
print("mant-",QThread.currentThread())
self.tool_thread.tool_receive_timer.start(5)
# QThread.msleep(100)
#
# # ts = self.tool_thread.openCom()
# if self.tool_thread.serialTool.is_open:
#
if self.tool_thread.ts =