私はGTKに本当に慣れていないので、それを理解しようとしています。私が今持っているのは
Widgets *w; // shared mem
struct mystruct *user; // shared mem
....
pid = fork();
.....
if(pid == 0) {
while(1){
get_events(user);
parse_events(user);
// can I write to Widgets *w and the changes happen in the
// parent process that is running the gtkmainloop
write_to_textview("child", w);
}
} else {
......
write_to_textview("parent", w);
gtk_widget_show_all(window);
gtk_main();
}
ユーザーは、親、子「およびその他」の間の共有構造体です。この構造体には、GtkTextView の親プロセスでプレビューしたいデータが含まれています。データが利用可能になり次第、その方法がわかりません。親でこのようなものを使用することはできません
while(1) {
is_available_data(user);
}
データが利用可能かどうかを確認し、データを GtkTextView に書き込みます。gtk のメイン ループのため、これは不可能です。このシナリオには別の方法があるはずなので、更新または利用可能になるとすぐにユーザー - >イベント(char *)を監視できるようになります(ユーザーはshmで、イベントもshmです)が、どうすればできますかgtk にループするように指示します。Gtkスレッド?
shm を使用して子プロセス (ウィジェットが親プロセスで実行されている場所) からウィジェットに書き込む簡単な方法はありますか?
私がやろうとしていることよりも簡単な方法が他にもあると確信しています。
編集1:
構造体で子プロセスから生成/変更/追加されたデータを確認でき、親プロセス (shm) で問題なく確認できます。私がやりたいのは、データが変更されたらすぐに TextView を更新することだけです。これには、チェックと更新が必要な while ループが必要だと思いますが、gtkmainloop がブロックされているため、それは起こりません。アイデアや方法が必要です。私を助けるためにgtk関連の呼び出しを見つけようとしてしばらく費やしましたが、できませんでした。