我有一个带有开始动作按钮的窗口。点击按钮窗口冻结后,我想启动微调器。它是用C语言
这是按钮设置。
g_signal_connect(button, "clicked", G_CALLBACK(setVPN), entry);
功能setVPN:
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;
Fucntion工作正常。但旋转器没有启动,并且第一条消息没有显示。返回后,对旋转器和设置标签窗口执行此操作。我尝试做一个新的过程,但那个替代方案不起作用。
感谢您的帮助。
答案 0 :(得分:3)
当您的代码不运行时,GTK +会完成其工作,即渲染小部件等。它是单线程的,如果你的程序卡在system()
里面,那么GTK +就无法让CPU去做工作,就像绘制微调器一样。
您必须使用异步I / O.
另外,只需使用g_strdup_printf()
来构建字符串。