2015-03-31 3 views
1

У меня возникли проблемы с делегированием вызова функции в основной поток из рабочего потока. Поскольку я не могу позвонить в GTK из рабочего потока, я хочу делегировать этот вызов основному потоку, чтобы сделать это для меня. Функция должна быть вызвана как можно скорее на основном потоке.GTK: вызов функции делегата в основной поток

Я попробовал следующее:

g_idle_add(myfunc, myargs); 
g_main_context_wakeup(NULL); 

Но это не работает. myfunc() не вызывается немедленно, а только когда приходит какой-то другой вход, который, по-видимому, вызывает основной цикл. Я не понимаю, почему это не работает. Не следует ли g_main_context_wakeup() запустить основной цикл?

Мой главный цикл выглядит следующим образом:

loop = g_main_loop_new(NULL, FALSE); 
while(!quit) g_main_context_iteration(NULL, TRUE); 

Любые идеи?

ответ

2

Чтобы ответить на мой собственный вопрос, это не сработало, потому что я на старой версии GTK, которая требует многопоточности, чтобы явным образом была вызвана вызовом g_thread_init(). Как только я вызову g_thread_init(), теперь g_main_context_wakeup() работает нормально.

Смежные вопросы