1

pthreadsで作成されたバックグラウンドスレッドからバインドされたGtkListStoreを更新した後、 GtkTreeViewを再描画させる方法を見つけようとしています。

通常、ウィジェットは、何かが既存の行を覆い隠すまで更新されません (マウス カーソルでも)。

この問題に関する私の検索のほとんどは、「あなたのツリーモデルは正しい信号を生成していません/生成していません」....

産業用組み込みアプリケーション用に、古い Red Hat 9 と gtk+ 2.0.0 を実行しています。ほとんどのデータは ipc/socket/pipes から取得され、GTK アプリによって表示されます。残念ながら、CRITICAL アラームもそうです。これは、表示されるべきときに表示されない傾向があります。(いつの日か) 現在のカーネルに移行する予定ですが、既存のソフトウェアで動作するものを取得する必要があります。

「row - changed シグナルを発行しようとしました。

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();
}
4

1 に答える 1

1

メイン スレッドでリスト ストアの更新を実行できます。たとえば、ワーカー スレッドで g_idle_add() を使用できます。

于 2012-09-26T21:28:28.577 に答える