2011-03-11 63 views
0

當我寫類似下面的程序:問題用fork()在GTK +程序

GtkWidget *pbar1, pbar2; 

ginit update_p_bar(gpointer pbar) 
{ 
    // get the value of process bar *pabr*, add it by 0.05, then set the 
    // process bar's value to the new value 
} 

void fork_me(GtkWidget *widget, gpointer data) 
{ 
    pid_t pid; 
    if((pid = fork()) < 0){ 
     fprintf(stdout, "fork() error"); 
     exit(1); 
    } 
    else if(pid == 0){ 
     gtk_timeout_add(100, update_p_bar, pbar2); 
    } 
    else{ 
     gtk_timeout_add(100, update_p_bar, pbar1); 
    } 
} 

int main(int argc, char *argv[]) 
{ 
    gtk_init (&argc, &argv); 

    // create a new window, add two process bar *pbar1*, *pbar2* and 
    // a button *button* to it. 
    // connect *button* with function *fork_me* 

    gtk_widget_show_all(window); 
    gtk_main(); 
} 

我想要做的是顯示在同一時間兩個處理吧增加。
但是當我運行它,它說:

程序「進程」得到× Window系統錯誤。這可能是 反映了程序中的錯誤。 錯誤是'BadIDChoice(爲此 連接選擇的無效 資源ID)'。

程序 '過程' 接收到的X 窗口系統錯誤。這可能是 反映了程序中的錯誤。 錯誤是'BadDrawable(無效Pixmap 或Window參數)'。

我的程序出了什麼問題?

回答

0

錯誤看起來與您的分叉非常不相關。不要連接你的信號並重試,看看錯誤是否仍然發生(在這種情況下,問題出在main),或者它與回調代碼有關。

此外,您的update_p_bar不尊重GSourceFunc原型。它應該是

gboolean update_p_bar (gpointer pbar)