我对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