簡體   English   中英

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

並且學會了從我的線程調用這個我必須先調用:

  1. g_threads_init() - 我不這樣做,因為我無法在libgdk-x11-2.0.so.0找到此函數,也無法在libgtk-x11-2.0.so.0
  2. gdk_threads_init()
  3. gtk_init(0, null)
  4. gdk_threads_enter()
  5. gdk_pixbuf_get_from_drawable(....)
  6. gdk_threads_leave()

所以這很好用但每次我的用戶點擊按鈕進行屏幕截圖我再次執行所有這些功能。 所以我的問題是:

  1. 多次運行gdk_threads_init是否安全? 線程從未被破壞所以我不應該正確運行它? 但如果我這樣安全嗎?
  2. 可以多次運行gtk_init(0, null)嗎?

我問這個的原因是因為當我通過反復調用該函數進行測試時,通常在第二次應用程序減速並最終崩潰並顯示消息:

程序接收信號SIGSEGV,分段故障。

來自/usr/lib/x86_64-linux-gnu/libX11.so.6的XGetImage()中的0x00007f09382138b4

你不應該需要這些; Firefox會為你做gtk_init,如果你在主線程上,你不需要任何線程的東西。 你可能需要的最多,如果FF確實使用GDK線程的東西,將是進入和離開。

段錯誤很可能是由無關的錯誤引起的。 嘗試設置MALLOC_CHECK_ = 2並在gdb中運行,或嘗試在valgrind下運行,以查找內存錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM