Доброго времени суток. Использую gtkmm и среду NetBeans.
Вот суть проблемы:
В многопоточном приложении есть окно с виджетом TreeView (основной поток), в TreeView динамически добавляются новые строчки (приходят сигналы из другого потока). Как вызвать перерисовку окна\виджета для динамического отображения добавленных данных? Дело в том, что они обновляются только, к примеру, при нажатии кнопок на форме, перемещении окна или хотя бы передвижении мыши, т.е. если окно не трогать - данные не обновляются.
нашел в официальной доке по gtkmm вот такой код, положил его в метод, добавляющий новую строчку://------------------------------------------------------------------------
while(Gtk::Main::instance()->events_pending())
Gtk::Main::instance()->iteration();
//------------------------------------------------------------------------
Он работает (строки таблицы обновляются без всяких действий пользователя) но! Программа с ним работает крайне нестабильно - почти сразу же вываливается с сообщениями типа:
//------------------------------------------------------------------------
(monitor_simple:6008): GLib-WARNING **: g_main_context_prepare(): main loop already active in another thread
GLib-ERROR **: file gmain.c: line 2012 (g_main_dispatch): assertion failed: (source)
aborting...
/usr/libexec/monitor_simple: No such file or directory.
terminate called after throwing an instance of 'std::out_of_range'
what(): vector::_M_range_check
warning: Unable to set global thread event mask: generic error
Error while reading shared library symbols:
Cannot enable thread event reporting for process 6008: generic error
Cannot access memory at address 0xa4a648
/home/AID/NetBeansProjects/monitor_simple/6008: No such file or directory.
/home/AID/netbeans-6.0rc2/cnd1/bin/dorun.sh: line 82: 6008 Аварийный останов "$pgm" "$@"
//------------------------------------------------------------------------
Вот.