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