我写了一个如下程序:
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;。
我的计划有什么问题?
答案 0 :(得分:0)
错误看起来与你的fork无关。不要连接你的信号并重试,看看是否仍然发生了错误(在这种情况下问题出在main
),或者它是否与回调代码有关。
此外,您的update_p_bar不尊重GSourceFunc原型。它应该是
gboolean update_p_bar (gpointer pbar)