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