LINUX.ORG.RU

gtk gui refresh


0

0

Такая ситуация:

есть гтк приложение, где часть работы происходит в отдельной нити - эта нить должна обновлять гуи. Т.к. в гтк прямое обновление интерфеиса может происходить только в основной нити, изменения становятся видны только когда пользователь поводит мышой над формой или т.п. Как можно это обойти - как обновить мгновенно интерфеис из нити, не вызывавшеи gtk_main() ?

Гугл ведёт к ThreadNotify для gtk#... но я то на сях пишу :)

★★★★★
Ответ на: комментарий от ananas

спасибо большое. правда с gtk_threads я ничего не делал, а просто добавил выплнение пустой функции по таймеру из gtk_main():

g_timeout_add (500, &timeout, NULL);

может решение не столь красиво, но максимальная задержка в полсекунды вполне приемлима: данные всё равно из сети получаются.

Pi ★★★★★
() автор топика
Ответ на: комментарий от Pi

Делаешь класс YourPackageJob у которого есть метод do_job и сигнал job-is-finished.

Присоединяешь обновление к этому сигналу. Запускаешь в отдельном потоке метод do_job который делает тяжелую работу, по окончании которой порождаешь сигнал. Никакого locking не нужно при этом, потому что glib thread safe.

Еще можешь из потоков пул сделать - GQueue смотри в документации.

Однажды писали про это дело даже библиотеку, можно ее поискать.

welkam ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.