我对 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();
}
user 是父、子“和其他人”之间的共享结构,该结构包含我想在 GtkTextView 的父进程中预览的数据,一旦它们可用,我不知道该怎么做。不可能在父级中使用这样的东西
while(1) {
is_available_data(user);
}
这将检查数据是否可用,然后将数据写入 GtkTextView。由于 gtk 主循环,这是不可能的。在这个场景中必须有另一种方式,这样我就可以在用户->事件(char *)更新或可用时立即查看它应该再次打印(用户是 shm,事件也是 shm)但是怎么能我告诉 gtk 循环。Gtk线程?
有没有一种简单的方法使用 shm 从子进程(小部件在父进程中运行的位置)写入小部件?
我敢肯定还有其他方法比我尝试做的更容易。
编辑1:
我可以在结构中看到子进程生成/更改/添加的数据,并且在父进程(shm)中看到它没有问题。我想要做的就是在数据发生更改时立即更新 TextView,我相信我需要一个必须检查和更新的 while 循环,但由于 gtkmainloop 阻塞,这不会发生。我需要想法或方法来做到这一点。我花了一些时间试图找出与 gtk 相关的调用来帮助我,但不能。