Проблема при использовании fork () в программе GTK + - PullRequest
0 голосов
/ 11 марта 2011

Я написал программу, как показано ниже:

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

То, что я пытаюсь сделать, это показать увеличение двух тактов процесса одновременно.
Но когда я запускаю его, он говорит:

Программа 'процесс' получила X Окно Системная ошибка. Это наверное отражает ошибку в программе. ошибка была 'BadIDChoice (неверный ID ресурса выбран для этого подключение).

и

Программа 'process' получила X Окно Системная ошибка. Это наверное отражает ошибку в программе. ошибка была 'BadDrawable (неверный Pixmap или параметр Window) '.

Что не так с моей программой?

1 Ответ

0 голосов
/ 11 марта 2011

Ошибка выглядит совершенно не связанной с вашей вилкой.Не подключайте ваши сигналы и попробуйте снова, чтобы увидеть, если ошибка все еще происходит (в этом случае проблема в main), или это связано с кодом обратных вызовов.

Кроме того, ваш update_p_bar неНе уважайте прототип GSourceFunc .Это должно быть

gboolean update_p_bar (gpointer pbar)
...