`
wanghailiang333
  • 浏览: 197763 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

GTK线程的简单使用与线程中更新图形界面

阅读更多

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();
……
}

 

(我就是在这弄了好久,才发现原来是要包裹住要更新的控件,不能加入其它别的代码才行)

 

以上是个人的一点小见解,若文中有错误,请大家多多提出意见,我会尽快改正。

 

 

 

 

2
2
分享到:
评论
1 楼 sonichy 2016-03-15  
能这个是无限循环,如何通过按钮启动,只数一次就退出呢?
我在做一个倒计时完后调用系统命令截屏,现在的问题是系统截屏后才开始计时。

相关推荐

    GTK多线程聊天工具

    而在多线程环境中,主线程负责处理用户界面的更新,而其他线程负责网络通信。这样,即使在网络通信繁忙时,用户界面仍然能保持响应,提升用户体验。例如,在这个聊天工具中,可能有一个线程专门用于接收消息,另一个...

    GTK环境下的多线程设计.pdf

    此外,多线程还能显著提升应用程序的响应能力,尤其是对于需要处理大量数据传输和图形界面更新的任务来说,多线程可以让这些操作并行执行,避免因某个操作耗时过长而导致整个系统响应缓慢甚至停滞。 #### 多线程...

    Gtk+图形界面开发

    Gtk+图形界面开发是Linux应用程序开发中的一个重要领域,它主要用于构建美观、功能丰富的图形用户界面(GUI)。Gtk+是一个跨平台的 widget 工具包,最初设计用于GNOME桌面环境,但现在也被广泛应用于其他Linux发行版...

    基于Gtk+的Linux图形界面任务管理器

    标题 "基于Gtk+的Linux图形界面任务管理器" 指出的是一个使用Gtk+库在Linux操作系统上开发的图形用户界面(GUI)应用程序,主要功能可能是用于管理和监控系统任务。Gtk+是一个广泛使用的跨平台GUI工具包,支持多种...

    GTK+3.0详细的说明文档

    GTK+3.0是GIMP Toolkit的最新版本,是一个跨平台的GUI库,广泛用于创建图形用户界面。它支持多种操作系统,包括Linux、Windows和macOS。GTK+3.0的详细说明文档提供了全面的学习资源,帮助开发者充分利用其功能。 在...

    Linux下的GTK图形界面编程

    ### Linux下的GTK图形界面编程详解 #### 一、GTK简介 GTK (GIMP Toolkit) 是一个广泛应用于Linux及类Unix操作系统中的图形用户界面工具包。它不仅免费且开源,适用于开发自由软件或商业应用程序,无需支付任何费用...

    Linux环境下Gtk的使用小程序,多线程小程序,内核编译方法实例程序,字符设备程序,类似windows的进程管理器程序综合说明书

    通过上述五个实验的学习与实践,学生不仅能够深入了解Linux下的各种编程技术,还能掌握从底层到上层的多种技能,如文件操作、多线程编程、内核模块开发、字符设备驱动以及图形用户界面设计等。这些实验不仅巩固了...

    Linux课程设计多线程聊天,有图形界面,源码,报告都在里面

    在本Linux课程设计中,我们将探讨如何构建一个基于多线程的聊天系统,该系统具有图形用户界面(GUI)。这个项目不仅提供了完整的源代码,还有详细的执行报告,确保了其功能的正确性和可用性。下面将详细介绍这个多...

    GDB与GTK+的使用技术文档

    通过阅读提供的文档和教程,开发者不仅可以掌握这两个工具的基本使用,还能深入了解图形界面编程的原理和技术,从而能够开发出高效、用户友好的应用程序。同时,结合OpenGL的学习,可以进一步提升在图形处理和游戏...

    GTK+2.0+中文教程.pdf

    GTK (GIMP Toolkit) 是一套用于创建图形用户界面的工具包。它遵循 LGPL 许可证,所以你可以用它来开发开源软件、自由软件,甚至是 封闭源代码的商业软件,而不用花费任何钱来购买许可证和使用权。 GTK 被称为 GIMP ...

    gtk-2-中文开发手册.7z

    12. **事件循环和线程**:理解GTK+的事件处理模型,以及如何在多线程环境中使用GTK+。 13. **高级特性**:如拖放操作、可扩展性(插件系统)、Accessibility支持等。 14. **编程实例**:手册通常会包含大量示例...

    利用GTK、WebKit,建立基于HTML的Python图形用户界面

    GTK和WebKit是两个流行的图形界面工具包和浏览器引擎,它们允许开发者结合HTML技术来创建Python应用程序的GUI。 在使用GTK和WebKit构建基于HTML的Python GUI时,开发者可以利用它们各自的特点。GTK是一个广泛使用的...

    GTK+ 图形化应用程序开发 学习笔记

    GTK+,全称为GIMP Toolkit,是一个用于创建图形用户界面(GUI)的开源库,主要在Linux和其他类Unix系统上使用,但也支持Windows和macOS。这个“GTK+图形化应用程序开发学习笔记”包含了关于使用GTK+进行GUI编程的...

    C++简易画图软件(图形界面)

    在本项目中,我们讨论的是一个使用C++编程语言实现的简易画图软件,它具有图形用户界面(GUI)。这个程序允许用户通过鼠标或其他输入设备进行基本的绘图操作,如绘制直线、曲线、填充颜色等。下面我们将深入探讨这个...

    GTK+程序设计中文版 .pdf

    GTK+ 程序设计中文版 GTK+ 是一种函数库,用来帮助制作图形交互界面。整个函数库都是由 C 语言来编写的。GTK+ 函数库通常也叫做 GIMP 工具包,...了解 GTK+ 的使用和应用将有助于您更好地开发图形交互界面应用程序。

    GTK中文教程

    GTK,全称GIMP Toolkit,是一个用于创建图形用户界面(GUI)的开源工具包,广泛应用于Linux、Unix和Windows等操作系统。GTK最初是为图像处理软件GIMP开发的,但随着时间的发展,它已经成为一个功能强大的跨平台GUI库...

    GTK-DOC GTK官方说明文档(包括GDK等)

    GTK,全称GIMP Toolkit,是一个用于创建图形用户界面(GUI)的开源工具包,主要应用于Linux和其他类Unix系统,但也有支持Windows和macOS。GTK由GTK+库构成,其中包括GDK(GTK Drawing Kit)作为其核心部分,用于处理...

    GTK编程入门级教程

    7. **多线程编程**:如果需要,教程可能会介绍如何在GTK应用中安全地使用多线程,以实现更复杂的并发功能。 8. **国际化与本地化**:学习如何使你的GTK程序支持多种语言,以及如何利用gettext工具进行翻译。 9. **...

    采用GTK进行简单聊天程序客户端的编写.txt

    ### 使用GTK进行简单聊天程序客户端的开发 在深入解析如何使用GTK库开发一个简单的聊天程序客户端之前,我们先简要了解GTK(GIMP Toolkit)是什么。GTK是一个用于创建图形用户界面(GUI)的跨平台工具包,主要用于...

    应用SDL及GTK实现视频多路回放

    通过调用SDL_SetWindowData将SDL窗口与GTK的GtkWidget关联,然后在GTK的画图回调中使用SDL_QueueTexture将SDL的纹理信息绘制到GTK窗口上。 **音频处理** 除了视频,视频回放还包括音频的处理。SDL提供了音频缓冲和...

Global site tag (gtag.js) - Google Analytics