0
私は単純な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();
}
}
メインスレッドですべてのGUIアップデートを実行する必要があります。別のスレッドで何らかの変更が検出された場合この目的のために、 'g_idle_add()'はあなたの友人です。 – Gerhardh