如何在创建文件时更新GTK GUI?
我正在尝试创建一个简单的GTK应用程序。只要某些文件是由不同的进程创建的,我就想在GUI上写东西。我想我不能在父进程中执行while(true)
,因为这会冻结GUI。相反,我想叉,检查文件是否存在,并控制GUI,但它似乎没有工作,我笨拙的代码如下:如何在创建文件时更新GTK GUI?
int check_for_files(){ FILE *fp;
int files_set;
char ch;
files_set = 0;
while(!files_set){
fp = fopen("file", "r");
if(fp != NULL){
content_length = 0;
while(ch=getc(fp) != EOF){
content_length++;
}
fclose(fp);
files_set = 1;
return files_set;
}
else{
files_set = 0;
}
}
return 1;
}
int main(int argc, char *argv[]) {
// Main function the get the application UI
GtkWidget *window;
GdkPixbuf *icon;
GtkWidget *grid;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(window), 500, 300);
gtk_container_set_border_width(GTK_CONTAINER(window), 15);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
int pid = fork();
if (pid == 0){
int files_set = check_for_files();
printf("files outside: %d\n",files_set);
gtk_window_set_title(GTK_WINDOW(window), "Files are present!");
}
else{
icon = create_pixbuf("net.png");
gtk_window_set_icon(GTK_WINDOW(window), icon);
// Get the grid
get_grid(window);
gtk_widget_show_all(window);
g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
g_object_unref(icon);
gtk_main();
}
}
回答:
当您要执行I/O操作,看看gio,这是集成到GLib。所以你应该使用GFileMonitor
,它使用inotify来通知文件系统的变化。 GFileMonitor
的“说明”部分介绍了要使用的功能。
以上是 如何在创建文件时更新GTK GUI? 的全部内容, 来源链接: utcz.com/qa/261533.html