我對GDK/GTK相當新,但我試圖讓一些C代碼是線程安全的。 (這是相當大,否則我會在這裏發佈。) 我正在做一些壓力測試,GDB停止了一個錯誤:程序收到信號SIGABRT,中止。該程序在一個名爲gdk_window_get_frame_clock的函數中暫停,該函數根據GDK文檔是用於同步屏幕重新繪製的低級函數。堆棧跟蹤只顯示我「0x0 in ??」爲來電者。 有沒有人知道這裏發生了什麼或我可以開始搜索?我完全困惑。來自gdk_window_get_frame_clock的SIGABRT信號
0
A
回答
0
切勿從包含glib或gtk主循環的線程以外的其他線程中繪製任何內容。使用g_idle_add
,g_timeout_add
或基於GSource
的自定義掛鉤將來自輔助線程的UI更改排入隊列(這些是線程安全的!)
相關問題
- 1. 信號SIGABRT 0
- 2. iCarousel - Thread1信號SIGABRT
- 3. 目的C++,SIGABRT信號
- 4. 信號sigabrt委託 - > AppDelegate.swift
- 5. 「計劃接收信號‘SIGABRT’
- 6. 線程1:信號SIGABRT
- 7. Xcode:線程1:信號SIGABRT
- 8. 程序接收信號「SIGABRT」
- 9. HSC ASSESMENT - UICollectionView信號SIGABRT
- 10. FireBase錯誤信號SIGABRT
- 11. 信號:SIGABRT(中止)@ realloc
- 12. 如何調試信號SIGABRT
- 13. Swift:表視圖 - 信號SIGABRT
- 14. 線程1:信號SIGABRT alamofire
- 15. 線程1:信號「SIGABRT」錯誤信息
- 16. 使用NSuserdefaults的Swift中的信號SIGABRT
- 17. 來自代表的信號
- 18. 線程1信號SIGABRT的iOS
- 19. 程序接收到的信號:「SIGABRT」
- 20. 程序接收到的信號SIGABRT(FORTRAN)
- 21. 導致「線程1:信號SIGABRT」的Firebase
- 22. 如何編寫sigabrt信號的信號處理程序?
- 23. Xcode錯誤 - 線程1:信號SIGABRT
- 24. MKCoordinateRegionMakeWithDistance引發「線程1:信號SIGABRT」
- 25. setVideoURI導致致命信號6(SIGABRT)
- 26. tableview刷新粉碎Thread1:信號SIGABRT
- 27. 類AppDelegate:UIResponder,UIApplicationDelegate線程1:信號SIGABRT
- 28. 線程1崩潰:信號SIGABRT
- 29. 筆尖導航線程1:信號SIGABRT
- 30. 線程2/8/9:信號sigabrt錯誤
需要更多信息。查看gdb的堆棧跟蹤,瞭解問題發生時編寫的代碼中發生了什麼,然後從那裏開始。 – 2014-10-06 01:48:08
無法直接從其他線程調用GTK/GDK函數。你是否正確地使用'gdk_threads_enter()'/'gdk_threads_leave()'或其他等價函數來鎖定來自其他線程的所有訪問? – j123b567 2014-10-06 07:36:17
應用程序通過創建一個新的工作線程來設置自身,以在執行和重新繪製期間執行復雜的計算。主線程處理用戶交互。這幾乎肯定是一種競賽條件。 我使用POSIX線程和互斥鎖來控制對我的應用程序變量的訪問。我會嘗試設置關鍵部分,並在有機會時回覆。 – Chris 2014-10-13 14:00:27