我用C编写了一个程序来测试动态GTK标签的更改,但是程序在一些迭代之后立即停止了GUI的更新。
使用GTK直接在调用PThreads ()之前创建一个新线程,我认为这是正确的方法,因为gtk_main手册说gdk_threads_*函数是不推荐的,并且没有建议任何替代方法。
这是新创建的线程的过程和入口点。它简单地将一个常量字符串与不断增加的迭代次数连接起来,并将其设置为标签,但在不可预测的迭代量之后,它将停止更新。
void * change_text(void * args)
{
char * initialText = (char *) malloc(strlen(gtk_label_get_text((GtkLabel *) args)) * sizeof(char));
strcpy(initialText, gtk_label_get_text((GtkLabel *) args));
char setnew[512];
int x = 1;
while(1) {
printf("%s\n", initialText);
sprintf(setnew, "%s %d", initialText, x++);
gtk_label_set_text(GTK_LABEL(args), setnew);
sleep(1);
bzero(setnew, 512);
}
}线不会崩溃。
谁能帮我什么是正确的方法来动态更新标签,按钮,…在GTK3?
发布于 2017-03-21 18:00:55
您可以在线程中使用g_idle_add ((GSourceFunc) yourfunc,NULL )来运行yourfunc。在此链接中,所有代码:
thread
https://stackoverflow.com/questions/29898844
复制相似问题