PySide線程的退出處理

在pyside中使用線程進行阻塞處理時,在主程序退出時總會顯示內存非讀提示框,糾結一段時間後總算明白,主程序在退出時線程並沒有馬上停止,而相應的資源已經被主程序注銷掉。現在的問題怎樣讓主程序等待線程完成清理現場並安全中止後再退出。

再次糾結中...經一番xx後,總算有一個辦法雖然土了點,還是夠用的。

 

 

 

調用MThread.waitForExit可以等待阻塞處理完成後再繼續執行後面指令。

 

 

 

 

 

抱歉,我之前的回答不完整。以下是完整的示例代码,演示了如何在PySide中使用QThread来创建线程,并在界面上显示线程发送的消息: ```python import time from PySide2.QtWidgets import QApplication, QMainWindow, QLabel from PySide2.QtCore import QThread, Signal, Slot # 定义一个继承自QThread线程class MyThread(QThread): # 定义一个信号,用于在线程中发送消息 message = Signal(str) def run(self): # 在线程中执行的任务 for i in range(5): time.sleep(1) # 发送消息到主线程 self.message.emit(f"Message {i+1}") # 创建主窗口类 class MainWindow(QMainWindow): def __init__(self): super().__init__() self.label = QLabel("No message", self) self.label.setGeometry(10, 10, 200, 30) # 创建线程对象 self.thread = MyThread() # 连接信号和槽函数,用于接收线程发送的消息 self.thread.message.connect(self.update_message) @Slot(str) def update_message(self, msg): # 更新界面上的消息显示 self.label.setText(msg) # 打印消息到控制台 print(msg) def start_thread(self): # 启动线程 self.thread.start() if __name__ == "__main__": app = QApplication([]) window = MainWindow() window.show() # 启动线程 window.start_thread() app.exec_() ``` 在这个示例中,我们首先导入了需要的模块和类。然后,我们定义了一个继承自QThread线程类`MyThread`,并重写了`run()`方法,在其中执行需要在后台执行的任务。在任务执行过程中,通过发射信号`message`将消息传递给主线程。 接下来,我们创建了一个继承自QMainWindow的主窗口类`MainWindow`,在其中创建了一个标签控件用于显示线程发送的消息。我们还在主窗口类中创建了线程对象,并连接了信号`message`与槽函数`update_message()`,用于接收线程发送的消息并更新界面上的显示。 最后,在主程序中创建了应用程序对象和主窗口对象,并启动了线程。通过调用`start_thread()`方法来启动线程。 当线程发送消息时,槽函数`update_message()`将被调用,更新界面上的消息显示,并打印消息到控制台。 请注意,以上只是一个简单的示例,供你参考。在实际使用时,你需要根据自己的需求进行适当的修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值