单击按钮后,为什么我的 window 冻结了?

After I click a button, why does my window freeze?

我有一个 window 带有开始操作按钮。单击 window 按钮后冻结,但我想启动微调器。是C语言

这是按钮设置。

g_signal_connect(button, "clicked", G_CALLBACK(setVPN), entry);

函数设置VPN:

const gchar *vpn;

    gtk_spinner_start(GTK_SPINNER(spinner)); //start spinner
    gtk_label_set_markup(GTK_LABEL(msg), "<span foreground=\"#000000\">Probýhá změna VPN...</span>");

    vpn = gtk_entry_get_text(GTK_ENTRY(entry));

    char *ask; // Create system aks
    ask = malloc(30+strlen(vpn));
    strcpy(ask, "bash /bin/VPNSet/makeFile.sh ");
    strcat(ask, vpn);
    system(ask);
    free(ask);

    gtk_label_set_markup(GTK_LABEL(msg), "<span foreground=\"#00EE00\">Hotovo: VPN bylo změněno</span>");
    //message("Uspěch","VPN bylo změněno.");
    gtk_spinner_stop(GTK_SPINNER(spinner)); //stop spinner
    return; 

功能正常。但是微调器没有启动,第一条消息也没有显示。此操作用于微调器并设置标签 window 在 return 之后执行。我尝试作为一个新流程来做,但那个替代方法不起作用。

感谢您的帮助。

当您的代码 不是 运行 时,GTK+ 会完成它的工作,即小部件的呈现等。它是单线程的,如果您的程序卡在 system() 中,GTK+ 就无法让 CPU 工作,例如绘制微调器。

你必须使用异步I/O。

此外,只需使用 g_strdup_printf() 来构建字符串。