linux多线程在gui编程中的应用

linux多线程在gui编程中的应用

ID:3914358

大小:133.00 KB

页数:4页

时间:2017-11-25

linux多线程在gui编程中的应用_第1页
linux多线程在gui编程中的应用_第2页
linux多线程在gui编程中的应用_第3页
linux多线程在gui编程中的应用_第4页
资源描述:

《linux多线程在gui编程中的应用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第17卷第3期西南科技大学学报Vol.17No.32002年9月JOURNALOFSOUTHWESTUNIVERSITYOFSCIENCEANDTECHNOLOGYSep.2002文章编号:1671-8755(2002)03-0021-04Linux多线程在GUI编程中的应用卓学锋范俊波陈波(内江师范学院四川内江641000)(西南交通大学四川成都610031)摘要:讨论Linux多线程对传统进程调用的一些缺点的改进,实现了Linux下多线程同图形界面编程的结合。关键词:UNIX;Linux;多线程;Gtk中图分类号:TB311.138UN文献标识码:A1传统进程模型的缺

2、点在传统的UNIX模型中,当进程需要由另一个实体来执行某个任务时,它就fork一个子进程,让子进程去处理。比如,UNIX下的大多数网络服务器程序就是这么编写的。fork调用暴露出了以下几个问题:1)fork开销大。内存映像要从父进程拷贝到子进程,所有描述字要在子进程中复制一份,等等。当前的系统实现使用写时拷贝(copy-on-write)技术,尽管有这种优化,fork开销仍很大。2)fork子进程后,需用进程间通信(IPC)在父子进程间传递信息。fork之前由父进程准备好的信息容易传递,因为了进程是从父进程的数据空间所有描述符的一个拷贝开始运行的,但是从子进程返回信息给父

3、进程却颇费周折。另外,在并发地执行那些彼此间独立的任务,以及对多处理器体系结构的利用方面,多进程的缺点也是很明显的。2多线程的优点线程有助于解决这些问题,线程有时称为轻进程,创建线程可能比创建进程快10-100倍。POSIX.1线程标准是1995年通过的,LinuxThread多线程库遵照了这个标准。而在C函数库方面,Libc5函数库不完全是线程安全的,而glibc2则完全是线程安全的。当一个任务必须在I/O操作上等待或是在其它资源上阻塞时,另一个任务能被调度去运行,这是在网络服务器程序、异步通信程序以及图形用户接口程序中经常遇到的问题,使用多线程有助于解决它。3多线程的

4、特点及属性一个进程内的所有线程共享同一全局内存空间,这使得线程间很容易共享信息,但这种容易性也带来了同步的问题,一个进程内的所有线程不只是共享全局变量,以下信息也是共享的:1)进程指令;2)大多数数据;3)打开的文件描述符;4)信号处理程序;5)当前工作目录;6)用户ID和组ID。以下信息是特定于线程的:1)线程ID;2)寄存器集合;3)栈;4)errno;5)信号掩码;6)优先级。收稿日期:2002-05-1722西南科技大学学报2002年线程的调度可以在系统级或是应用程序级提供。内核提供的系统调度是通过识别一个进程中的多个线程并独立调用它们。应用程序级的调度是由应用程

5、序本身调度和管理的,线程不能被内核识别。在Linux中实现的是系统调度,因此每一个线程有自己的进程号。在多线程环境中,每个线程必须有自己的errno变量。提供一个局限于线程的errno变量的隐式请求是自动处理的,不过常要告诉编译器所编译的程序是可重入的,典型的方法是给编译器指定一个命令行选项如-DREENTRANT。头文件往往把errno定义成一个宏,当_REENTRANT有定义时,该宏就扩展成一个函数来访问errno变量的某个线程的拷贝。线程以调用一个启动函数开始(函数pthread_create),以后或者显式终止(函数pthreadexit),或者

6、隐式终止(函数返回)。4Linux下的GUI编程Linux下C/C++语言的图形用户接口(GUI)编程有多种方案,较流行的有基于Qt库、基于Gtk+/Gnome两种,本文将要介绍的是后者。Gtk+(GIMPToolKit,GIMP工具包)是一个用于创造图形用户接口的图形库,它是基于LGPL授权的。Gtk+的共享包及软件库统称为GTK。GTK编程同JAVA的AWT编程有相以之处,不过GTK是用C语言编写的,虽然没有使用C++这样的面向对象语言,GTK实现了自己的具有继承和派生特性的对象系统。在Gtk+构件里面,所有的构件都是从GtkObject对象派生而来的。下面介绍一个简

7、单的例子程序,在桌面显示一个最简单的窗口:/*base.c*/#includeintmain(intargc,char*argv[]){GtkWidget*window;gtkinit(&argc,&argv);window=gtkwindownew(GTKWINDOWTOPLEVEL);gtkwidgetshow(window);gtkmain();return0;}//程序结束可用gcc编译上面的例子程序:gccbase.c-0base-gtk-config-cflags-libs-5LinuxGTK

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。