Gtk2 多线程 gdk_pixbuf_get_from_drawable 问题
Gtk2 Multi Thread gdk_pixbuf_get_from_drawable Questions
大家好 GTKers
我正在为 Firefox 编写插件,这是一个 GTK2 应用程序。我需要执行gdk_pixbuf_get_from_drawable
,现在这个函数需要在主线程上运行。
我读了这篇文章:http://blogs.operationaldynamics.com/andrew/software/gnome-desktop/gtk-thread-awareness
并了解到要从我的线程中调用它,我必须先调用:
g_threads_init()
- 我没有这样做,因为我找不到在 libgdk-x11-2.0.so.0
和 libgtk-x11-2.0.so.0
中定义的这个函数
gdk_threads_init()
gtk_init(0, null)
gdk_threads_enter()
gdk_pixbuf_get_from_drawable(....)
gdk_threads_leave()
所以这工作正常,但每次我的用户单击按钮进行屏幕截图时,我都会再次执行所有这些功能。所以我的问题是:
- 多次运行
gdk_threads_init
安全吗?线程从未被破坏所以我不应该 运行 对吧?但是这样做安全吗?
- 多次运行
gtk_init(0, null)
可以吗?
我问这个的原因是因为当我通过重复调用该函数进行测试时,通常在第二次后应用程序变慢并最终崩溃并显示消息:
Program received signal SIGSEGV, Segmentation fault.
0x00007f09382138b4 in XGetImage () from /usr/lib/x86_64-linux-gnu/libX11.so.6
你不应该需要这些; Firefox 会为您完成 gtk_init,如果您在主线程上,则不需要任何线程内容。如果 FF 确实使用 GDK 线程的东西,你可能需要的最多就是进入和离开。
段错误很可能是由不相关的错误引起的。尝试在 gdb 中设置 MALLOC_CHECK_=2 和 运行,或尝试在 valgrind 下设置 运行,以查找内存错误。
大家好 GTKers
我正在为 Firefox 编写插件,这是一个 GTK2 应用程序。我需要执行gdk_pixbuf_get_from_drawable
,现在这个函数需要在主线程上运行。
我读了这篇文章:http://blogs.operationaldynamics.com/andrew/software/gnome-desktop/gtk-thread-awareness
并了解到要从我的线程中调用它,我必须先调用:
g_threads_init()
- 我没有这样做,因为我找不到在libgdk-x11-2.0.so.0
和libgtk-x11-2.0.so.0
中定义的这个函数
gdk_threads_init()
gtk_init(0, null)
gdk_threads_enter()
gdk_pixbuf_get_from_drawable(....)
gdk_threads_leave()
所以这工作正常,但每次我的用户单击按钮进行屏幕截图时,我都会再次执行所有这些功能。所以我的问题是:
- 多次运行
gdk_threads_init
安全吗?线程从未被破坏所以我不应该 运行 对吧?但是这样做安全吗? - 多次运行
gtk_init(0, null)
可以吗?
我问这个的原因是因为当我通过重复调用该函数进行测试时,通常在第二次后应用程序变慢并最终崩溃并显示消息:
Program received signal SIGSEGV, Segmentation fault.
0x00007f09382138b4 in XGetImage () from /usr/lib/x86_64-linux-gnu/libX11.so.6
你不应该需要这些; Firefox 会为您完成 gtk_init,如果您在主线程上,则不需要任何线程内容。如果 FF 确实使用 GDK 线程的东西,你可能需要的最多就是进入和离开。
段错误很可能是由不相关的错误引起的。尝试在 gdb 中设置 MALLOC_CHECK_=2 和 运行,或尝试在 valgrind 下设置 运行,以查找内存错误。