Gtk2 + Ithreads

Тема в разделе "Perl программирование", создана пользователем gavv, 26 май 2009.

  1. gavv

    gavv Гость

    всем привет.
    кто использовал Gtk2 и ithreads вместе, поделитесь опытом. были у кого-нибудь проблемы с DESTROY ? они вызываются много раз, для каждого потока, в join, и сегфолтятся, т.к копии в разных потоках на самом деле не глубокие (это же обертки для С-указателей) и делается попытка удалить виджеты больше одного раза.
    если использвать Glib::Object->set_threadsafe (1), то с большинстом виджетов все становится нормально, но, например, TreeView* все равно сегфолтятся/ассерятся (как повезет).

    заглянул в GObject.xs, set_threadsafe просто при почковании потока заставляет увеличивать счетчик ссылок элементов (хранятся ссылки в глобальном хэше), а DESTROY уменьшает (элементов - то есть внутренней С-части виджета, которая при создании потока не копируется). однако подэлементы TreeView видимо пересоздаются при создании потока (напр, TreeViewColumn), не знаю почему, но в логах после async "gperl_new_object0 GtkTreeViewColumn(afe7d60)[4] => Gtk2::TreeViewColumn (b7f6a10)[0] (PRE-OWN)" и все портят.

    пробовал подменить им DESTROY, чтобы вызывался только один раз, в изначальном потоке, но тогда течет память, т.к. что-то все-таки копируется (и течет сильно)

    вот. у кого-нибудь было похожее ? может, есть еще какая-нибудь функция, вроде починить_то_что_не_починила_threadsafe :) ?
     

Поделиться этой страницей