预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

万方数据 基于MFC的多线程编程技术pr0伊咖ingBased蚰MFCprog姗meMulti—thr明djng塑!生垒旦杨峰Abstract:This枷cle立ProgrammjngTheTechnjque0f行,更需要应用程序能够同时处理多个事件,而这作系统分配cPu时间的基本实体,每个线程占用』!坠婴尘堂!塑g坐Q坚&!Y堕h西££!!!!醒t}lreading锄dobjectobjec‘;con。espondence在现代的各种实时监控系统和通信系统中,如果用户的应用程序需要有多个任务同时进行相应的处理,则使用多线程是较理想的选择。一个线程负责检查网络,另一个线程管理磁盘驱动器,还有一个线程负责显示数据,三个线程结合起来共同完成文件服务,使用者也可以及时看到网络的变化。多线程应用范围很广,尤其是在目前的桌面平台上,系统的许多功能都在一个系统下运些正是多线程可以实现的。¨二19x/NT是抢先式的多任务操作系统,程序对CPU的占用时间由系统决定。多任务指的是系统可以同时运行多个进程,每个进程又可以同时执行多个线程。进程是应用程序的运行实例,拥有自己的地址空间。每个进程拥有一个主线程,同时还可以建立其他的线程。线程是操的CPU时间由系统分配,系统不停的在线程之间切换。进程中的线程共享进程的虚拟地址空间,可以访问进程的资源,处于并行执行状态。MFC多线程的编程方法1.1创建线程在VC++6.0下,MFC应用程序的线程由CWinThread对象表示。VC++把线程分为两种:用户界面线程和工作者线程。用户界面线程能够提供界面和用户交互,而工作者线程主要用来处理程序的后台任务。程序一般不需要直接创建CWinrlllread对象,通过调用A6【Be百nThread()函数就会自动创建一第12卷第2期扬州职业大学学报』塑:2鲤§(平顶山工业职业技术学院,河南平顶山467001)摘要:介绍了VisualC++6.0中利用MFC类库进行多线程开发的编程技术,并利用该技术分析多线程编程中线程间的通信及同步对象的典型用法。关键词:多线程;MFc;同步对象;线程间的通信中图分类号:TP311.52文献标识码:A文章编号:1008—3693(2008)02—0038一04YANG“一feng(Pingdin伊h如V0catiorIallndustry,Pingdingsh鲫467001,chim)tIleC++6.0.Meanwhile.Meanwhile,ittypicalbetweentlleaboveWindows作者简介:杨立峰(1968一)。男.平顶山工业职业技术学院计算机系讲师。硕士研究生。presentstechniquethatempIoysMFCdatabasethemuIti—threadingdeVeloPmentinVisualanalysesusagespondencesynchronousmulti—threadingbyusingtechnique.KeyworIb:multi—threading;MFC;synchronous1收稿日期:2007一lO—10v01.12No.2CoUegeoft0carryoncorre- 万方数据 万方数据 万方数据 胁Be舀n111r8ad(g”chrofunction,hWnd);编译、连接Mysny程序,执行菜单“Synchm-显然,使用临界区进行线程同步之后,3个线程打印的计数器的值是均匀的递增,说明3个线互斥对象类似于临界区对象,但比临界区对的调用线程,直到这个互斥对象被占用的线程释放为止,这时等待的线程被唤醒并取得了对互斥一个线程存取资源,而信号量对象可以允许多个数。每当一个线程访问资源时,访问计数器的值许访问资源,直到某一线程释放信号量。(这时phore(2,2);来创建信号量对象。其中两个参数表示初始线程数和最大线程好的多线程程序,不仅需要对操作系统的处理过模块中的同步对象的具体含义应尽可能地清晰明[1]王明福,余苏宁.Vis脚c++程序设计[M].北京:高nize”结果见图1。程没有交替接管控制权,确保在同一时刻,只有一个线程访问数据对象count。3.2.2使用互斥对象进行线程同步象更复杂。它不仅允许同一程序的不同线程安全共享资源,而且允许不同应用程序的线程安全共享资源。一个互斥对象只能被一个线程拥有,如果另一线程已经占用了互斥对象,则系统将挂起当前对象的控制。同一应用程序的不同线程安全共享资源的方法同临界区对象类似。3.2.3使用信号量对象进行线程同步临界区对象和互斥对象在同一时刻都只允许线程同时存取资源。当创建信号量对象时,可以设置访问计数器的值来控制同时使用资源的线程减l,当访问计数器的值为0时,其他线程不再允导致访问计数器加1)为止。使用语句C