如何使用gtk和C暂停UI?

时间:2019-04-05 15:56:04

标签: c sleep gtk2 usleep

我正在使用GTK作为UI在C语言中创建数独。我正在通过回溯实现数独,我希望它具有一定的动画效果,也就是说,我希望它显示每个单元格中发生变化的数字,并返回矩阵中,但不是,对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;
}

我希望输出像动画的数独,但是实际输出是一秒钟等待解决的数独。我想不断使用每个单元格尝试使用的每个数字更新界面,并显示热点通过返回单元格等来执行回溯。

0 个答案:

没有答案