您的位置:首页资料计算机教程

《美河提供.基于Windows的多线程编程》

资源分类:
资料/计算机教程
发布者:
美河.aipepsi
发布时间:
2007-01-12 15:21
最新更新时间:
2007-01-12 22:43
浏览次数:
加载中..
eMule资源

中文名称:美河提供.基于Windows的多线程编程
地区:大陆
语言:普通话
简介
1.jpg
36.jpg 37.jpg 37.jpg[attachmentid=325513进程与线程
进程和线程是两个相对的概念,通常来说,一个进程可以定义程序的一个实例(Instance)。在Win32中,进程并不执行什么,它只是占据应用程序所使用的地址空间。为了让进程完成一定的工作,进程必须至少占有一个线程,正是这个线程负责包含进程地址空间中的代码。实际上,一个进程可以包含几个线程,它们可以同时执行进程地址空间中的代码。为了做到这一点,每个线程有自己的一组CPU寄存器和堆栈。每个进程中至少有一个线程在执行其地址空间中的代码。如果没有线程执行进程地址空间中的代码,进程也就没有继续存在的理由,系统将自动清除进程及其地址空间。
多线程的实现原理
创建一个进程时,它的第一个线程称为主线程(Primary thread),由系统自动生成。然后可以由这个主线程生成额外的线程,而这些线程,又可以生成更多的线程。
在运行一个多线程的程序时,从表面上看,这些线程似乎在同时运行。而实际情况并非如此,为了运行所有的这些线程,操作系统为每个独立线程安排一些CPU时间。单CPU操作系统以轮转方式向线程提供时间片(Quantum),每个线程在使用完时间片后交出控制,系统再将CPU时间片分配给下一个线程。由于每个时间片足够的短,这样就给人一种假象,好像这些线程在同时运行。创建额外线程的唯一目的就是尽可能地利用CPU时间。
多线程的问题
使用多线程编程可以给程序员带来很大的灵活性,同时也使原来需要复杂技巧才能解决的问题变得容易起来。但是,不应该人为地将编写的程序分成一些碎片,让这些碎片按各自的线程执行,这不是开发应用程序的正确方法。
线程很有用,但当使用线程时,可能会在解决老问题的同时产生新问题。例如要开发一个字处理程序,并想让打印功能作为单独的线程自己执行。这听起来是很好的主意,因为在打印时,用户可立即返回,开始编辑文档。但这样一来,在该文档被打印时文档中的数据就有可能被修改,打印的结果就不再是所期望的内容。也许最好不要把打印功能放在单独的线程中,不过如果一定要用多线程的话,也可以考虑用下面的方法解决:第一种方法是锁定正在打印的文档,让用户编辑其他的文档,这样在结束打印之前,该文档不会作任何修改;另一个方法可能更有效一些,即可以把该文档拷贝到一个临时文件中,打印这个临时文件的内容,同时允许用户对原来的文档进行修改。当包含文档的临时文件打印完成时,再删去这个临时文件。
通过上面的分析可以看出,多线程在帮助解决问题的同时也可能带来新问题。因此有必要弄清楚,什么时候需要创建多线程,什么时候不需要多线程。总的来说,多线程往往用于在前台操作的同时还需要进行后台的计算或逻辑判断的情况,而对于GUI(图形用户接口),除了开发MDI(多文档界面)应用程序外,应尽量不使用多线程。
线程的分类
在MFC中,线程被分为两类,即工作线程和用户界面线程。如果一个线程只完成后台计算,不需要和用户交互,那么可以使用工作线程;如果需要创建一个处理用户界面的线程,则应使用用户界面线程。这两者的主要区别在于,MFC框架会给用户界面线程增加一个消息循环,这样用户界面线程就可以处理自己消息队列中的消息。这样看来,如果需要在后台作一些简单的计算(如对电子表格的重算),则首先应考虑使用工作线程,而当后台线程需要处理比较复杂的任务,确切地说,当后台线程的执行过程会随着实际情况的不同而改变时,就应该使用用户界面线程,以便能对不同的消息作出响应。
线程的优先级
当系统需要同时执行多个进程或多个线程时,有时会需要指定线程的优先级。线程的优先级一般是指这个线程的基优先级,即线程相对于本进程的相对优先级和包含此线程的进程的优先级的结合。操作系统以优先级为基础安排所有的活动线程,系统的每一个线程都被分配了一个优先级,优先级的范围从0到31。运行时,系统简单地给第一个优先级为31的线程分配CPU时间,在该线程的时间片结束后,系统给下一个优先级为31的线程分配CPU时间。当没有优先级为31的线程时,系统将开始给优先级为30的线程分配CPU时间,以此类推。除了程序员在程序中改变线程的优先级外,有时程序在执行过程中系统也会自动地动态改变线程的优先级,这是为了保证系统对终端用户的高度响应性。比如用户按了键盘上的某个键时,系统就会临时将处理WM_KEYDOWN消息的线程的优先级提高2到3。CPU按一个完整的时间片执行线程,当时间片执行完毕后,系统将该线程的优先级减1。
线程的同步
在使用多线程编程时,还有一个非常重要的问题就是线程同步。所谓线程同步是指线程之间在相互通信时避免破坏各自数据的能力。同步问题是由前面说到的Win32系统的CPU时间片分配方式引起的。虽然在某一时刻,只有一个线程占用CPU(单CPU时)时间,但是没有办法知道在什么时候,在什么地方线程被打断,这样如何保证线程之间不破坏彼此的数据就显得格外重要。在MFC中,可以使用4个同步对象来保证多线程同时运行。它们分别是临界区对象(CCriticalSection)、互斥量对象(CMutex)、信号量对象(CSemaphore)和事件对象(CEvent)。在这些对象中,临界区对象使用起来最简单,它的缺点是只能同步同一个进程中的线程。另外,还有一种基本的方法,本文称为线性化方法,即在编程过程中对一定数据的写操作都在一个线程中完成。这样,由于同一线程中的代码总是按顺序执行的,就不可能出现同时改写数据的情况。

已通过安全检测:
安全检测软件软件:KV2005
版本号:9.00.607
病毒库日期:2007-1-07
在线时间>18小时
常驻DonkeyServer No系列服务器



38.jpg

引用此页 (Trackback) (?)

引用后通告地址 (Trackback URL):http://service.verycd.com/trackback/lib/0000135389/

eMule 资源频道
首页
电影
音乐
游戏
软件
动漫
剧集
资料
>管理营销
>外语教程
>计算机教程
>图书杂志
>体育健身
>纪录片
>有声读物
>其他资料
综艺
杂志
论坛
eMule 客户端下载

eMule VeryCD 版  eMule 是下载迅速、资源丰富的新一代 P2P 软件,完全遵从 GPL 协议开发,开放源码,永久免费。利用他的卓越特性,我们不但可以与全世界的网友共同分享资源,更可以通过 VeryCD,下载和发布最新的资源,充分享受自由共享的乐趣!

  最新版本:
eMule 客户端下载

热门下载

《电视包装、广告创意》(STASH DVD Magazine Issue 27)27[DVDRip]

《程序员2006年全1-12期》(Programmer Magazine)

《VTC Corel Painter IX教程》(VTC Corel Painter IX Tutorials)[Bin]

《Excel.2003全能培训教程》卧底经济学 英文版

《最强Dot Net教程资料集合》

《多媒体课堂-网页设计师必修 多媒体光盘4CD》[ISO]

《尚学堂科技.马士兵.JAVA.JSP.系列视频教程-2007-01-02更新》(http://www.bjsxt.com)

《Windows Vista正式版新手指南》[ISO]

《美河原创培训课程之软件开发系列视频31号更新》

《TestOut教程》(TestOut CompTIA Linux Plus Training Suite)[ISO]
推荐下载

《尚学堂科技.马士兵.JAVA.JSP.系列视频教程-2007-01-02更新》(http://www.bjsxt.com)

《图片素材&资源》

《电脑报2006合订本DVD之06中国计算机年鉴》

《李阳疯狂说英语VCD》(Crazily Speak English)全部为ISO格式[ISO]

《全国名老中医临床经验高级讲习班第一期》更新至《朱良春,晁恩祥》更新完毕!

《80年代荷尔蒙》(Hormone Eighties)[WMV]

《中国图片库》(CHINA STOCK PHOTOS)无版本说明[ISO]

《任真之经典古籍收藏》中文

《十二集大型纪录片故宫-更新花絮 卫星高清晰视频》卫星电视MPEGII数据流直接采集[TVRip]

《幸福人生讲座》更新8集版本08/8[wmv]

《有声畅销书 阿尔忒弥斯之鸟 欧因·科弗》(Artemis Fowl audiobook)German Edition

《爱我中华—中华历史文化合集》06月12日更新 新增《中国记忆》[RMVB]

《宫S》(GungS)更新至01集/YYcaF韩语中字/HDTV[RMVB]

《 萤火虫》(Serenity)思路出品:.h264.1080P.OAR.国英双声轨15.29G [HDTV]

《天下足球》(TotalSoccer)[YDY出品]更新07.01.08(2006年世界杯纪录片.蓝色狂想)[RMVB]

《碧血剑》[国语][VCD-RMVB][更新20/上半部20集][RMVB]

《花样男子2》(Hana Yori Dango2)更新至第一回/06冬季日剧/日菁字幕/日语繁中[RMVB]

《IBM软件系列》(IBM software)[Bin]

《转角遇到爱》(Corner With Love)更新至01集(icefish)[TVRip]

鲁宾斯坦 -《鲁宾斯坦-肖邦全集》(The Chopin Collection)[更新CD6(波兰舞曲)][APE]
Get Firefox!