天天看點

QT程式報錯 Debug Error abort() has been called

1.報錯問題

QT程式報錯 Debug Error abort() has been called

報錯位置:

QT程式報錯 Debug Error abort() has been called

代碼流程:

  1. 在主線程中觸發一個槽函數,執行資料轉換的功能;
  2. 在該槽函數中,通過子線程拉起資料轉換的函數,即RenderThread::Run();
  3. 槽函數原有代碼中,不等待轉換結束,資料轉換留在背景進行,槽函數直接結束。
    QT程式報錯 Debug Error abort() has been called

2.報錯原因

  1. 用thread建立的多線程,在子線程中,控制主程式退出,如果沒有等到子線程執行并結束線程,報錯:Debug Error! Abort() has been called

    .
  2. 有些情況下,将debug模式改為release模式,不會出現該問題,具體原因待排查~

3.報錯解決

修改槽函數,等待資料轉換的線程結束後,再結束,如下:

QT程式報錯 Debug Error abort() has been called

Tips:

  1. 代碼中的IsRunOver()查詢目前狀态是加鎖的,避免與資料轉換線程的讀寫沖突;
  2. Sleep(5)的目的是每隔5ms查詢一次,沒必要一直查詢,浪費CPU資源;
  3. 将程式從debug模式改為release模式運作;
  4. 對運作時間敏感的,建議不要通過讀寫狀态來判斷,可以直接通過鎖狀态來判斷。