在GTK +程序中使用fork()时出现问题

时间:2011-03-11 09:02:39

标签: linux process gtk fork

我写了一个如下程序:

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 ();
}

我试图做的是同时显示两个进程条增加 但当我运行它时,它说:

  

程序&#39;流程&#39;收到了X.   窗口系统错误。这可能   反映了程序中的错误。该   错误是&#39; BadIDChoice(无效   为此选择的资源ID   连接)&#39 ;.

  

程序&#39;流程&#39;收到了X.   窗口系统错误。这可能   反映了程序中的错误。该   错误是BadDrawable(无效的Pixmap   或窗口参数)&#39;。

我的计划有什么问题?

1 个答案:

答案 0 :(得分:0)

错误看起来与你的fork无关。不要连接你的信号并重试,看看是否仍然发生了错误(在这种情况下问题出在main),或者它是否与回调代码有关。

此外,您的update_p_bar不尊重GSourceFunc原型。它应该是

gboolean update_p_bar (gpointer pbar)