gpt4 book ai didi

c - 如何在文件创建时更新 GTK GUI?

转载 作者:太空宇宙 更新时间:2023-11-04 06:53:35 25 4
gpt4 key购买 nike

我正在尝试创建一个简单的 GTK 应用程序。一旦某些文件由不同的进程创建,我想在 GUI 上写东西。我想我不能在父进程中执行 while(true),因为那样会卡住 GUI。相反,我试图 fork ,检查文件是否存在并操作 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 的“描述”部分介绍了要使用的功能。

关于c - 如何在文件创建时更新 GTK GUI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47863984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com