GTK线程的简单使用与线程中更新图形界面
1)线程的简单使用,通过一个简单例子来说明(能运行)
编译命令:
gcc `pkg-config gtk+-2.0 --cflags --libs gthread-2.0` -std=gnu99 -o thread thread.c
注意要加上gthread-2.0
#include <gtk/gtk.h>
GtkWidget *window;
GtkWidget *label;
void hello(){
int i;
for(i=0;;i++){
/*使用gdk_thread_*()将要刷新的界面*/
char buf[6];
sprintf(buf,"%d",(int)i);
/*睡眠一下*/
sleep(1);
gdk_threads_enter();
gtk_label_set_text(GTK_LABEL(label),buf);
gdk_threads_leave();
if(i==100)i=0;
}
}
int main( int argc,char *argv[] ){
gtk_init (NULL,NULL);//这个函数这样使用不好,但在此例中简写它了
/* 创建一个新窗口 */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window),"thread number");
gtk_widget_set_usize(GTK_WIDGET(window),200,60);
/*创建一个标签*/
label=gtk_label_new("0");
gtk_container_add (GTK_CONTAINER (window), label);
gtk_widget_show (label);
gtk_widget_show (window);
g_signal_connect (G_OBJECT (window), "destroy",G_CALLBACK(gtk_main_quit), NULL);
/*线程的初始化*/
if(!g_thread_supported()) g_thread_init(NULL);
gdk_threads_init();
/*创建线程*/
g_thread_create((GThreadFunc)hello, NULL, FALSE, NULL);
gdk_threads_enter();
gtk_main ();
gdk_threads_leave();
return 0;
}
2)线程中更新图形界面的方法:
要在GTK的线程中更新图形界面,则需要调用gdk_threads_enter();与gdk_threads_leave();将要更新图形界面的地方前后包围起来,
如:
gdk_threads_enter();
gtk_clist_append(GTK_CLIST(user_clist), text);
gdk_threads_leave();
gdk_threads_*()的作用并不是进入线程,据网上说是线程同步用的。
但一定要将要更新的部位包裹住,有多少个地方需要更新界面,就用多少次gdk_threads_*(),将其包裹住,
如有线程函数:
void Thread(){
……
gdk_threads_enter();
gtk_label_set_text(GTK_LABEL(label),"hello1.");
gdk_threads_leave();
……
gdk_threads_enter();
gtk_label_set_text(GTK_LABEL(label),"hello2.");
gdk_threads_leave();
……
gdk_threads_enter();
gtk_label_set_text(GTK_LABEL(label),"hello2.");
gdk_threads_leave();
……
}
(我就是在这弄了好久,才发现原来是要包裹住要更新的控件,不能加入其它别的代码才行)
以上是个人的一点小见解,若文中有错误,请大家多多提出意见,我会尽快改正。
分享到:
相关推荐
而在多线程环境中,主线程负责处理用户界面的更新,而其他线程负责网络通信。这样,即使在网络通信繁忙时,用户界面仍然能保持响应,提升用户体验。例如,在这个聊天工具中,可能有一个线程专门用于接收消息,另一个...
Gtk+图形界面开发是Linux应用程序开发中的一个重要领域,它主要用于构建美观、功能丰富的图形用户界面(GUI)。Gtk+是一个跨平台的 widget 工具包,最初设计用于GNOME桌面环境,但现在也被广泛应用于其他Linux发行版...
标题 "基于Gtk+的Linux图形界面任务管理器" 指出的是一个使用Gtk+库在Linux操作系统上开发的图形用户界面(GUI)应用程序,主要功能可能是用于管理和监控系统任务。Gtk+是一个广泛使用的跨平台GUI工具包,支持多种...
### Linux下的GTK图形界面编程详解 #### 一、GTK简介 GTK (GIMP Toolkit) 是一个广泛应用于Linux及类Unix操作系统中的图形用户界面工具包。它不仅免费且开源,适用于开发自由软件或商业应用程序,无需支付任何费用...
GTK+3.0是GIMP Toolkit的最新版本,是一个跨平台的GUI库,广泛用于创建图形用户界面。它支持多种操作系统,包括Linux、Windows和macOS。GTK+3.0的详细说明文档提供了全面的学习资源,帮助开发者充分利用其功能。 在...
通过上述五个实验的学习与实践,学生不仅能够深入了解Linux下的各种编程技术,还能掌握从底层到上层的多种技能,如文件操作、多线程编程、内核模块开发、字符设备驱动以及图形用户界面设计等。这些实验不仅巩固了...
在本Linux课程设计中,我们将探讨如何构建一个基于多线程的聊天系统,该系统具有图形用户界面(GUI)。这个项目不仅提供了完整的源代码,还有详细的执行报告,确保了其功能的正确性和可用性。下面将详细介绍这个多...
12. **事件循环和线程**:理解GTK+的事件处理模型,以及如何在多线程环境中使用GTK+。 13. **高级特性**:如拖放操作、可扩展性(插件系统)、Accessibility支持等。 14. **编程实例**:手册通常会包含大量示例...
通过阅读提供的文档和教程,开发者不仅可以掌握这两个工具的基本使用,还能深入了解图形界面编程的原理和技术,从而能够开发出高效、用户友好的应用程序。同时,结合OpenGL的学习,可以进一步提升在图形处理和游戏...
GTK (GIMP Toolkit) 是一套用于创建图形用户界面的工具包。它遵循 LGPL 许可证,所以你可以用它来开发开源软件、自由软件,甚至是 封闭源代码的商业软件,而不用花费任何钱来购买许可证和使用权。 GTK 被称为 GIMP ...
GTK(GIMP Toolkit)作为Linux环境下主流的图形用户界面工具包之一,以其强大的功能、跨平台性以及丰富的API受到广泛欢迎。对于开发者而言,能够在Windows环境下利用GTK进行窗口程序的开发具有重要意义,这不仅能够...
GTK和WebKit是两个流行的图形界面工具包和浏览器引擎,它们允许开发者结合HTML技术来创建Python应用程序的GUI。 在使用GTK和WebKit构建基于HTML的Python GUI时,开发者可以利用它们各自的特点。GTK是一个广泛使用的...
GTK+,全称为GIMP Toolkit,是一个用于创建图形用户界面(GUI)的开源库,主要在Linux和其他类Unix系统上使用,但也支持Windows和macOS。这个“GTK+图形化应用程序开发学习笔记”包含了关于使用GTK+进行GUI编程的...
在本项目中,我们讨论的是一个使用C++编程语言实现的简易画图软件,它具有图形用户界面(GUI)。这个程序允许用户通过鼠标或其他输入设备进行基本的绘图操作,如绘制直线、曲线、填充颜色等。下面我们将深入探讨这个...
在Linux操作系统中,GUI(图形用户界面)的开发可以借助各种库来实现,GTK(GIMP Toolkit)就是其中一种流行的选择。GTK是一个用于创建图形用户界面的开源工具包,支持多种编程语言,包括C、Python、Java等。在这个...
GTK+ 程序设计中文版 GTK+ 是一种函数库,用来帮助制作图形交互界面。整个函数库都是由 C 语言来编写的。GTK+ 函数库通常也叫做 GIMP 工具包,...了解 GTK+ 的使用和应用将有助于您更好地开发图形交互界面应用程序。
GTK,全称GIMP Toolkit,是一个用于创建图形用户界面(GUI)的开源工具包,主要应用于Linux和其他类Unix系统,但也有支持Windows和macOS。GTK由GTK+库构成,其中包括GDK(GTK Drawing Kit)作为其核心部分,用于处理...
GTK,全称GIMP Toolkit,是一个用于创建图形用户界面(GUI)的开源工具包,广泛应用于Linux、Unix和Windows等操作系统。GTK最初是为图像处理软件GIMP开发的,但随着时间的发展,它已经成为一个功能强大的跨平台GUI库...
7. **多线程编程**:如果需要,教程可能会介绍如何在GTK应用中安全地使用多线程,以实现更复杂的并发功能。 8. **国际化与本地化**:学习如何使你的GTK程序支持多种语言,以及如何利用gettext工具进行翻译。 9. **...