在我从使用pthreads创建的后台线程更新绑定的GtkListStore后,我一直试图找出一些方法来导致GtkTreeView重绘。
通常,小部件不会更新,直到有东西遮住了现有行(甚至是鼠标光标)。
我对这个问题的大部分搜索都有“你的树模型没有/没有生成正确的信号”......
我正在运行带有 gtk+ 2.0.0 的旧 Red Hat 9,用于工业嵌入式应用程序。大多数数据来自 ipc/socket/pipes 并由 GTK 应用程序显示。不幸的是,CRITICAL 警报也是如此,它习惯于不显示何时应该显示。我们将(有一天)迁移到当前的内核,但我需要使用现有的软件。
我尝试发出“行更改”信号,尝试调用gtk_widget_queue_draw并尝试连接到“expose-event”,在那里我尝试了各种不起作用或段错误的事情。
服务器.c
bool Server::Start()
{
// ....
// pthread_t _id;
//
pthread_create( & _id, NULL, &StaticServerThread, this );
// ....
}
查看器.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();
}