1.報錯問題
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNCM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPR5keZpWT3lkeNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zRQpkL5gDNxITM1ATMyATNwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
報錯位置:
代碼流程:
- 在主線程中觸發一個槽函數,執行資料轉換的功能;
- 在該槽函數中,通過子線程拉起資料轉換的函數,即RenderThread::Run();
- 槽函數原有代碼中,不等待轉換結束,資料轉換留在背景進行,槽函數直接結束。
QT程式報錯 Debug Error abort() has been called
2.報錯原因
-
.用thread建立的多線程,在子線程中,控制主程式退出,如果沒有等到子線程執行并結束線程,報錯:Debug Error! Abort() has been called
- 有些情況下,将debug模式改為release模式,不會出現該問題,具體原因待排查~
3.報錯解決
修改槽函數,等待資料轉換的線程結束後,再結束,如下:
Tips:
- 代碼中的IsRunOver()查詢目前狀态是加鎖的,避免與資料轉換線程的讀寫沖突;
- Sleep(5)的目的是每隔5ms查詢一次,沒必要一直查詢,浪費CPU資源;
- 将程式從debug模式改為release模式運作;
- 對運作時間敏感的,建議不要通過讀寫狀态來判斷,可以直接通過鎖狀态來判斷。