我對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. 來自timeIntervalSince1970的信號SIGABRT?
- 2. Thread1信號SIGABRT
- 3. NSURLConnectionLoader信號SIGABRT
- 4. 信號SIGABRT
- 5. 信號SIGABRT 0
- 6. 的TableView - 信號SIGABRT
- 7. iCarousel - Thread1信號SIGABRT
- 8. 目的C++,SIGABRT信號
- 9. 線程1:信號SIGABRT -
- 10. 如何調試信號SIGABRT
- 11. 線程1信號SIGABRT
- 12. 信號sigabrt委託 - > AppDelegate.swift
- 13. 如何處理SIGABRT信號?
- 14. HSC ASSESMENT - UICollectionView信號SIGABRT
- 15. FireBase錯誤信號SIGABRT
- 16. 線程1:信號SIGABRT - AppDelegate.h
- 17. Swift:表視圖 - 信號SIGABRT
- 18. 「計劃接收信號‘SIGABRT’
- 19. Xcode:線程1:信號SIGABRT
- 20. 程序接收信號「SIGABRT」
- 21. 線程1:信號SIGABRT UITableview
- 22. 線程1:信號SIGABRT
- 23. 線程1:信號SIGABRT alamofire
- 24. 線程1:信號SIGABRT
- 25. 信號:SIGABRT(中止)@ realloc
- 26. 線程1:信號「SIGABRT」錯誤信息
- 27. 使用NSuserdefaults的Swift中的信號SIGABRT
- 28. 程序接收到的信號「SIGABRT」
- 29. 程序接收到的信號:「SIGABRT」
- 30. 線程1:信號SIGABRT IOS的Xcode 5
需要更多信息。查看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