Как я могу приостановить пользовательский интерфейс, используя GTK и C? - PullRequest
0 голосов
/ 05 апреля 2019

Я делаю судоку на C, используя GTK для пользовательского интерфейса.Я внедряю судоку с возвратом, и я хотел бы, чтобы она была своего рода анимированной, то есть я хочу, чтобы она показывала числа, изменяющиеся в каждой ячейке и возвращающиеся в матрицу, и все такое, однако, яЯ не очень знаком с Gtk, поэтому я не очень успешен.Программа запускается с чтения файла с судоку, который уже имеет некоторые начальные подсказки, и пытается завершить, когда я нажимаю кнопку «Решить».

Я пытался использовать sleep(), но он замораживает все приложение,Я попытался использовать g_usleep, но что он делает, просто ждет одну секунду и показывает, что судоку решено сразу.

 int solve_sudoku()
 {
    int row=0;
    int col=0;
    if(isEmpty(&row, &col) == 0) return 1;
    int i;
    for(i=1;i<=9;i++)
    {
        sudoku[row][col] = i;
        char c[2];
        sprintf(c,"%d",sudoku[row][col]);
        gtk_entry_set_text(GTK_ENTRY(mat[row][col]),c);
        g_usleep(1000);
        if(validate_Cell(i, row, col))
        {
            if(solve_sudoku()) return 1;
            sudoku[row][col]=0;
            char k[2];
            sprintf(k,"%d",sudoku[row][col]);
            gtk_entry_set_text(GTK_ENTRY(mat[row][col]),k);
            g_usleep(1000);
        }
   }
   return 0;
}

Я ожидаю, что результат будет похож на анимированную судоку, но фактический результат - ожидание решенной судоку в одну секунду.Я хочу постоянно обновлять интерфейс с каждым числом, которое он пытается для каждой ячейки, и показывать, что он выполняет возврат, возвращая ячейку и т. Д.

...