从pthreads更新gtk_tree_view

时间:2012-08-06 21:06:45

标签: gtk gtktreeview

我从 pthreads <创建的后台线程更新绑定的 GtkListStore 后,一直试图找出导致 GtkTreeView 重绘的方法/ b>

通常,窗口小部件不会更新,直到某些内容遮挡现有行(甚至是鼠标光标)。

我对此问题的大部分搜索都是“您的树模型没有/没有生成正确的信号”....

我正在使用gtk + 2.0.0运行旧的Red Hat 9,用于工业嵌入式应用程序。大多数数据来自ipc / socket / pipes,并由GTK应用程序显示。不幸的是,CRITICAL警报也是如此,它有一种习惯,即不应该显示它们。我们将(有一天)转移到当前的内核,但我需要使用现有的软件。

我尝试发出“行改变的”信号,尝试调用 gtk_widget_queue_draw 并尝试连接到“expose-event”,我尝试了各种不起作用的东西或者说错误。

server.c

bool Server::Start()
{
 // .... 
 // pthread_t _id;
 //
 pthread_create( & _id, NULL, &StaticServerThread, this );
 // ....
}

viewer.c

bool Viewer::ReadFinished( SocketArgs * args )
{
 gdk_threads_enter();

 // Populate the buffer and message
 //
 // GtkListStore *_outputStore;
 // gchar        *buffer;
 // gchar        *message;

 GtkTreeIter iter;
 gtk_list_store_insert_with_values( _outputStore, &iter, 0, 
                    0, buffer, 1, message, -1 );

 // ....
 gdk_threads_leave();
}

1 个答案:

答案 0 :(得分:1)

您可以在主线程中对列表存储执行更新。例如,您可以在工作线程中使用g_idle_add()。