Qt5執行緒錯誤:QThread: Destroyed while thread is still running
背景:
當前類,編寫接收子執行緒類訊號的槽函式和觸發子執行緒類執行的訊號;
新建一個子執行緒類,編寫槽函式和訊號,MyClass *m_MyClass=new MyClass();
新建一個執行緒物件QThread *runThread=new QThread();
使用connect連線當前類與子執行緒的訊號槽,以便觸發執行緒及接收執行緒執行結果;
使用m_MyClass.moveToThread(runThread),將子執行緒類移到執行緒中執行;
runThread->start(),開啟執行緒。
**在當前執行緒的解構函式中,如果先刪除runThread再刪除m_MyClass,則會出現錯誤QThread: Destroyed while thread is still running
**正確的寫法應該是:
runThread->exit(0);
delete m_MyClass;
delete runThread;
相關推薦
Qt5執行緒錯誤:QThread: Destroyed while thread is still running
背景: 當前類,編寫接收子執行緒類訊號的槽函式和觸發子執行緒類執行的訊號; 新建一個子執行緒類,編寫槽函式和訊號,MyClass *m_MyClass=new MyClass(); 新建一個執行緒物件QThread *runT
Qt5線程錯誤:QThread: Destroyed while thread is still running(執行runThread->exit(0))
文章 原創 delete class 函數 開啟 mov runt 連接 背景: 當前類,編寫接收子線程類信號的槽函數和觸發子線程類執行的信號; 新建一個子線程類,編寫槽函數和信號,MyClass *m_MyClass=new MyCla
【linux】Valgrind工具集詳解(十三):DRD(執行緒錯誤檢測器)
一、概述 多執行緒程式設計需要注意的問題: 資料競爭;鎖競爭;POSIX執行緒API使用不當;死鎖; 二、使用 1、例子main.c原始碼 #include <stdio.h> #include <pthread.h> #include <s
【linux】Valgrind工具集詳解(十三):Helgrind(執行緒錯誤檢測器)
一、概述 Helgrind用於檢測C、C ++和Fortran程式中使用符合POSIX標準的執行緒函式造成的同步錯誤。 POSIX中關於執行緒的主要抽象描述有:共享公共地址空間的一組執行緒、執行緒建立、執行緒連線、執行緒退出、互斥(鎖)、條件變數(執行緒間事件通知)、讀寫器鎖、自
Jupyter執行時出現下面的錯誤:Unexpected error while saving file: arma/Untitled.ipynb [Errno 13] Permission denied:
執行環境:Ubuntu16.04+Python2.7執行如下程式碼修改Jupyter的一部分檔案的許可權(執行完之後重新啟動即可): sudo chmod 777 ~/.local/share/jupyter/ cd ~/.local/share/jupyter/ ls s
執行時錯誤:“stack around the variable…was corrupted”
造冰箱的大熊貓@cnblogs 2018/11/1 引發問題的程式碼片段如下 WORD var; scanf ( "%d", &var ); 包含上述程式碼的程式,編譯正常,執行時也正常接收使用者輸入的資料。但待到程式執行結束時提示“stack ar
多執行緒三: NSThread 面試題
- (void)viewDidLoad { [super viewDidLoad]; NSThread *thread = [[NSThread alloc] initWithBlock:^{ NSLog(@"1"); }]; [thread st
多執行緒二:performSelector:withObject:afterDelay:方法
面試題: 列印結果是:1、3 原因 performSelector:withObject:afterDelay:的本質是往Runloop中新增定時器 子執行緒預設沒有啟動Runloop 一、方法的含義 [self performSelector:@selector(t
多執行緒(六):volatile
一:執行緒無法終止 public class MyThread extends Thread { private static boolean flag = true; @Override public void run() { System
多執行緒(五): CAS無鎖機制
java程式設計規範中long與double操作並不是原子的,在java的部分執行環境中,對於long以及double的操作並不是原子的。 例如有一個long型別的longfield欄位,某個執行緒正在執行:longfield = 123L ;這樣的指定操作,而同時有另一個執行緒正在
多執行緒(四):鎖
當我們修改多個執行緒共享的例項時,例項就會失去安全性,所以我們應該仔細找出例項狀態不穩定的範圍,將這個範圍設為臨界區,並對臨界區進行保護,使其只允許一個執行緒同時執行。Java使用synchronized或Lock來定義臨界區,保護多個執行緒共享的欄位。 例項的全域性變數(共享資源)
多執行緒(十): 併發中集合ConcurrentHashMap
public class HashTest { static Map<String, String> map = new HashMap<>(); public static void main(String[] args) {
多執行緒(七):ThreadLocal
多個執行緒共享同一個物件,所有執行緒都操作同一個物件。 public class ThreadLocalTest { public static void main(String[] args) { // 三個執行緒每個執行緒列印3次,所以從0列印到9
多執行緒(八): Vector與ArrayList
ArrayList不允許寫操作沒執行完就執行讀操作,正在讀的時候不允許去寫,必須寫完再讀,讀完再寫。 一:ArrayList不安全示例 使用ArrayList每次列印的集合數量可能會小於10000,而使用Vector每次都是10000 public class ListTes
多執行緒(九): HashTable、HashMap和ConcurrentHashMap
public class HashTest { static Map<String, Integer> map = new HashMap<String, Integer>(); // static Map<String, Integer&g
多執行緒同步:基於棧式同步
什麼是基於棧式同步?這是一種完全基於非同步環境的執行緒處理之間的同步,可能這讓人有些難以理解,但我們想想一下當你開闢了多條執行緒用於處理某種事物的時候,例如你訪問 Redis 中的 Set 介面,大多數的客戶端都需要阻塞當前執行緒,由另一個執行緒發射訊號通知核心停止阻塞(
18.執行緒同步:條件變數cond
1.條件變數 1.條件變數(Condtion Variable)是在多執行緒程式中用來實現“等待->喚醒”邏輯常用的方法。 2.條件變數+互斥鎖(一起使用) 執行緒同步——互斥鎖 阻塞執行緒——條件變數 2.條件變數使用場景舉例 舉個簡單的例子,應用程式A中包含兩
17.執行緒同步:讀寫鎖rwlock
1.讀寫鎖 讀鎖:共享 寫鎖:獨佔 1.多個執行緒可以對同一個共享資源加[讀鎖] 2.但是隻要有一個[寫鎖]到來,後面申請的鎖全部會阻塞 3.寫鎖優先:防止[寫操作]一直等待下去 當已經加了讀鎖,此時再來了寫鎖請求,之後又來了讀鎖請求====>後面到來的讀鎖請求不能 請求成功,只
16.執行緒同步:互斥鎖mutex
1.案例:兩個執行緒分別對一個變數,都++操作1000次 1.實際的執行結果:number的最終值<2000 2.資料混亂的原因: 多個執行緒操作了共享資源 CPU排程問題 3.解決:執行緒同步 int number=0;
19.執行緒同步:訊號量—>[單生產者/單消費者]單鏈表的插入和刪除
1.訊號量 1.訊號量本質 訊號量是鎖,是一種升級的mutex 訊號量在初始化時,可以指定共享資源的數量 2.相關函式 #include<semaphore.h> //標頭檔案 sem_t sem; //訊號量型別 int sem_destroy(se