2014-07-18 86 views
1

我知道在我們需要使用gdk_threads_enter和gdk_threads_leave之前,現在這個函數已經被棄用了,我對線程感到困惑。GTK 3線程管理

我應該只是用g_idle_add添加線程,就是這樣嗎?

+0

更具體的你想要達到什麼。 – drahnr

回答

-1

使用g_thread_new (name, func, data)

2

對於工人是無關的UI的東西,使用GThread API,任何東西UI相關的,你使用g_idle_add/g_timeout_add或附加定製GSource到所需的事件循環。 在某些情況下,您希望將這些組合起來 - 在GThread中執行一些工作,並在工作人員完成後立即通知用戶界面 - 通過g_idle_add

如果您正在開發一個庫,您還可以通過GAsyncInitableIface以非常乾淨和可取消的方式實現它(儘管在開始實際實施前需要多讀一點)。


在迴應@ ptomato的評論:

你應該使用,因爲庫gdk_threads_add_idle()和gdk_threads_add_timeout() 代替g_idle_add()和g_timeout_add()不 在你的控制可能會使用已棄用的GDK鎖定機制。如果 確保應用程序和庫中的代碼都不使用已棄用的gdk_threads_enter()或gdk_threads_leave()方法,則可以安全地使用g_idle_add()和g_timeout_add()。

+0

謝謝,我會堅持g_idle_add – darekg11

+1

請注意,如果你想在空閒/超時回調中使用GTK,你必須使用'gdk_threads_add_idle()'/'gdk_threads_add_timeout()' – ptomato