В чем разница между gtk_idle_add () и gtk_main_context_invoke () в gtk2? - PullRequest
0 голосов
/ 04 марта 2020

У меня есть приложение, которое порождает рабочий поток, вызывая g_thread_new (). Рабочий поток должен отправить информацию о ходе выполнения или, возможно, возникшие ошибки в основной поток, который обновляет GUI на основе полученных данных.

В настоящее время я использую:

gtk_main_context_invoke(NULL, (GSourceFunc)update_gui, data);

с первый параметр (типа GMainContext *), равный NULL, для запуска update_ gui () в главном контексте l oop, чтобы рабочий мог продолжить выполнение фактической работы.

При просмотре документации я обнаружил function:

guint g_idle_add (GSourceFunc function, gpointer data);

Будет ли эта функция более подходящей для моего приложения или я должен использовать совершенно другую функцию для передачи событий от рабочего к основному потоку?

1 Ответ

1 голос
/ 05 марта 2020

Эти функции эквивалентны. g_main_context_invoke() - это оболочка для g_idle_add(), которая исключает необходимость передачи сообщений, если вызывается на GMainContext, который принадлежит текущему потоку (что не так в вашем примере, но безвредно).

Обратите внимание, что функция g_main_context_invoke(), а не gtk_main_context_invoke(). Насколько я знаю, последний не существует. Аналогично, это g_idle_add(), а не gtk_idle_add().

И g_main_context_invoke(), и g_idle_add() предоставляются GLib, а не GTK. GTK использует GLib, но не требуется для этой конкретной функции.

...