欢迎访问宙启技术站
智能推送

qtpy.QtCoreQThread()的线程同步和互斥操作实例

发布时间:2024-01-17 21:12:08

在Python中,可以使用qtpy.QtCore.QThread类来创建一个线程。QThread类为线程的管理和控制提供了便利,包括线程同步和互斥操作。

下面是一个QThread的线程同步和互斥操作的示例:

import qtpy.QtCore as QtCore

class Worker(QtCore.QThread):
    def __init__(self):
        super().__init__()

    def run(self):
        for i in range(5):
            # 线程同步操作,打印当前线程的ID和计数值
            print(f"Thread ID: {self.currentThreadId()} - Count: {i}")
            self.msleep(1000)

class MainWindow(QtCore.QMainWindow):
    def __init__(self):
        super().__init__()

        self.worker = Worker()

        self.initUI()

        # 连接信号和槽
        self.worker.started.connect(self.on_worker_started)
        self.worker.finished.connect(self.on_worker_finished)

    def initUI(self):
        self.setGeometry(100, 100, 300, 200)
        self.setWindowTitle('Thread Example')

        self.startButton = QtWidgets.QPushButton("Start", self)
        self.startButton.setGeometry(QtCore.QRect(100, 100, 100, 30))
        self.startButton.clicked.connect(self.start_worker)

    def start_worker(self):
        self.startButton.setEnabled(False)

        # 启动线程
        self.worker.start()

    def on_worker_started(self):
        print("Worker started")

    def on_worker_finished(self):
        print("Worker finished")

        self.startButton.setEnabled(True)

if __name__ == '__main__':
    app = QtWidgets.QApplication([])
    mainWindow = MainWindow()
    mainWindow.show()
    app.exec_()

在这个例子中,我们创建了一个Worker类,继承自QThread类,并重写了run()方法,在run()方法内执行线程的任务。在任务的过程中,我们使用了线程同步操作,通过调用self.currentThreadId()方法来获取当前线程的ID,并打印出来。我们还使用了self.msleep(1000)来使当前线程休眠1秒,以便在每次执行次数间有间隔。

在MainWindow类中,我们创建了一个按钮,用于启动Worker线程。在start_worker()方法中,我们禁用按钮,然后启动Worker线程。在Worker线程启动和结束时,我们连接了相应的槽函数(on_worker_started()和on_worker_finished())。

这个例子演示了如何使用QThread类来创建一个工作线程,并实现线程同步和互斥操作。同时注意到,由于QThread是在QT中的类,所以我们还需要导入相应的模块来使用它们。