LINUX.ORG.RU

Gtk+, C, обновление окна из другого потока


0

0

Есть два потока, один основной, где исполняется gtk_main, а другой pthread, сетевой, который пытается обновлять окно по приходу событий.

Но окно не обновляется до тех пор, пока не наведёшь мышь, или не сделаешь какое-либо действие в окне. Например пытаюсь из сетевого треда добавить вкладку в notebook, но добавляется она только когда наведёшь мышь на окно.

Как бы форсировать обновление из другого потока?

anonymous

Никогда не стоит добавлять вкладки на лету. Это не удобно прежде всего для пользователя. Кроме того, лучше единый poll использовать, хотя это уже мелочи.

А по теме - блокировки нужно правильно использовать, иначе такие эффекты возникают. Нужно ещё раз внимательно

http://library.gnome.org/devel/gdk/unstable/gdk-Threads.html

перечитать

anonymous
()
Ответ на: комментарий от anonymous

Ну табы это я для примера.

У меня есть gtk_drawing_area, где по expose_event рисуется то, что нужно. Для обновления вызываю gtk_widget_queue_draw, но обновляется только после любого действия в окне.

Этими gdk_threads не пользуюсь, просто pthreads. Блокировок действительно никаких нет :) Тоесть конечно есть, но с gui никак не связаны, просто мьютексы.

Можно ли использовать эти gdk_threads_enter/leave с обычными pthreads, без обёрток, а то переписывать-пугает, ведь и так "почти всё работает" :)

anonymous
()
Ответ на: комментарий от anonymous

А, стоп, спасибо за ссылку, кажется я разобрался и оно уже обновляется! Спасибо!

anonymous
()

А я бы не стал использовать треды, а добавил бы GSource для сообщений из сети, и всё бы вертелось в рамках одного poll.

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

Насколько я понимаю, он будет засыпать при перетаскивании окон и появлении контекстных менюшек в Windows. Нам тоже недавно пришлось переписывать на тредах из-за этого.

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

> использовать эти gdk_threads_enter/leave с обычными pthreads

лучше таки разобраться с GLib'овскими потоками и использовать их.

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