zoukankan      html  css  js  c++  java
  • 关于QThread使用锁死的探索

    在学习使用QT5的时候,发现要使用多线程处理多任务,按照https://www.cnblogs.com/liming19680104/p/10397052.html等很多网上的方法,测试一下,发现我写的程序运行就崩溃。

    不断测试,发现一个现象:

    子线程的初始化要在窗口初始的同时进行

    程序代码如下:Ui_MainWindow 窗口是qt desinger生成的

    # -*- coding: utf-8 -*-
    
    # Form implementation generated from reading ui file 'D:pyworkqtpy	hreadtestmain.ui'
    #
    # Created by: PyQt5 UI code generator 5.11.3
    #
    # WARNING! All changes made in this file will be lost!
    
    from PyQt5 import QtCore,  QtWidgets
    
    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName("MainWindow")
            MainWindow.resize(465, 262)
            self.centralWidget = QtWidgets.QWidget(MainWindow)
            self.centralWidget.setObjectName("centralWidget")
            self.textEdit = QtWidgets.QTextEdit(self.centralWidget)
            self.textEdit.setGeometry(QtCore.QRect(40, 20, 281, 171))
            self.textEdit.setObjectName("textEdit")
            self.pushButton = QtWidgets.QPushButton(self.centralWidget)
            self.pushButton.setGeometry(QtCore.QRect(360, 30, 75, 23))
            self.pushButton.setObjectName("pushButton")
            MainWindow.setCentralWidget(self.centralWidget)
    
            self.retranslateUi(MainWindow)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)
    
        def retranslateUi(self, MainWindow):
            _translate = QtCore.QCoreApplication.translate
            MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
            self.pushButton.setText(_translate("MainWindow", "start"))

    QThread实现类:

    # -*- coding: utf-8 -*-
    from PyQt5.QtCore import *
    
    class MyQThread(QThread):
        sentText = pyqtSignal(str)
        
        def __init__(self,text):    #text是传递参数
            super(MyQThread, self).__init__()
            self.text = text + "in child thread"
            
        def run(self):
            for i in range(2000000000):
                pass
            # 循环完毕后发出信号
            self.sentText.emit(self.text)

    调用的主类:

    # -*- coding: utf-8 -*-
    
    """
    Module implementing MainWindow.
    """
    
    from PyQt5.QtCore import pyqtSlot
    from PyQt5.QtWidgets import QMainWindow, QApplication
    from myQThread import MyQThread
    from Ui_main import Ui_MainWindow
    
    
    class MainWindow(QMainWindow, Ui_MainWindow):
        """
        Class documentation goes here.
        """
        def __init__(self, parent=None):
            """
            Constructor
            
            @param parent reference to the parent widget
            @type QWidget
            """
            super(MainWindow, self).__init__(parent)
            self.setupUi(self)
          #在这里初始化没有问题 self.myqthread
    = MyQThread("hello") self.myqthread.sentText.connect(self.handleMessage) @pyqtSlot() def on_pushButton_clicked(self): """
          最开始是在这里初始化的
            myqthread = MyQThread("hello")
            myqthread.sentText.connect(self.handleMessage)
            myqthread.start()     
         """
            self.myqthread.start()
        def handleMessage(self, text):
            self.textEdit.setPlainText(self.textEdit.toPlainText()+"
    " + text)
    
    if __name__ == "__main__":
        import sys
        app = QApplication(sys.argv)
        MainWindow = MainWindow()
        MainWindow.show()
        sys.exit(app.exec_())

    提醒自已注意

  • 相关阅读:
    [BZOJ3413]匹配
    [BZOJ3879]SvT
    [BZOJ1339] [Baltic2008] Mafia / 黑手党
    [BZOJ1834] [ZJOI2010] network 网络扩容
    [BZOJ1449] [JSOI2009]球队收益 / [BZOJ2895] 球队预算
    [BZOJ2597] [WC2007]剪刀石头布
    [BZOJ1283]序列
    [BZOJ2127]happiness
    Java公开课-04.异常
    Java公开课-03.内部类
  • 原文地址:https://www.cnblogs.com/aocshallo1/p/11066530.html
Copyright © 2011-2022 走看看