- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
多线程技术 概述 多线程技术是现在基础计算机软件开发基本技术。它已经成为程序员必须掌握的基本技能。主要原因是: 1、提升程序的性能,更加有效的使用计算机资源。 2、硬件技术的发展,必须使用多线程设计。 3、现代操作系统的支持和分布式计算的需要。 线程的基本表示 一个线程简单的用一个函数来代表,这个函数还会调用其他函数。 一个程序由它的主线程开始执行,在传统C里是main函数,在windows程序里是WinMain函数。一旦还是运行,程序能够通过一个系统调用(CreateThread)创建新的执行线程,并且指定初始线程函数的名字。操作系统用类似与进程切换的方法在线程间切换控制。 Windows多线程体系结构 windows推荐的程序结构:主线程创建所有你需要的窗口,包括所有这些窗口的窗口过程,并且处理所有这些窗口的消息。任何其他的线程简单的在后台运行,它们除了与主线程通信外,不与用户交互。即主线程处理用户输入(包括其他消息)。新创建的线程处理与用户无关的任务。 一个特定程序里的线程都是同一个进程里的一部分,因此它们共享进程的资源,如内存和打开的文件。因为线程共享程序内存,因此共享静态变量。 每个线程有自己堆栈,因此自动变量对每个线程来说是唯一的。每个线程有自己的处理器状态(包括协处理器状态),这些状态在线程切换时保存和恢复。 线程冲突 Windows是一个抢占式多任务系统,它能够在任何时刻中断一个线程,将控制切换到另一个线程。而任何两个线程间出现的交互可能不那么明显并且偶尔才出现,具有偶然性。 多线程程序常见的BUG叫做“race condition”,也就是死锁。这种情况发生在当多个线程同时竞争、共享某个资源的情况下。 windows线程 32位windows有一个不联系的消息队列。执行的结果是:如果程序需要花很长时间处理一个消息,鼠标指针经过那个窗口时会变成漏斗状,到了其他窗口区域又变回箭头状。 windows里每个线程在创建时获得一个自己的消息队列。另外,windows提供一个函数,让同一个进程里的一个线程可以销毁另一个线程。 线程是进程的一条执行路径,它包含独立的堆栈和CPU寄存器状态,每个线程共享所有的进程资源,包括打开的文件、信号标识及动态分配的内存等。 一个进程内的所有线程使用同一个地址空间,而这些线程的执行由系统调度程序控制,调度程序决定哪个线程可执行以及什么时候执行线程。 线程有优先级别,优先权较低的线程必须等到优先权较高的线程执行完后再执行。 在多处理器的机器上,调度程序可将多个线程放到不同的处理器上去运行,这样可使处理器任务平衡,并提高系统的运行效率。 进程的主线程在任何需要的时候都可以创建新的线程。当线程执行完后,自动终止线程; 当进程结束后,所有的线程都终止。 由于活动的线程共享进程的资源,因此,在编程时需要考虑在多个线程访问同一资源时产生冲突的问题。 (当一个线程正在访问某进程对象,而另一个线程要改变该对象,就可能会产生错误的结果。) Windows是一种多任务的操作系统,一个Windows进程内包含一个或多个线程。 32位Windows环境下的Win32 API提供了多线程应用程序开发所需要的接口函数, 利用VC中提供的标准C库也可以开发多线程应用程序。 相应的MFC类库封装了多线程编程的类,用户在开发时可根据应用程序的需要和特点选择相应的工具。 window线程API函数 hThread=CreateThread(security_attributes,dwStackSize,ThreadProc,pParam,dwFlags,idThread); 第一个参数是指向SECURITY_ATTRIBUTES类型的指针,在98里该函数被忽略,在NT里可以设置为NULL。 第二个参数是为新线程分配的初始堆栈大小,这个参数可以为0 默认值。无论如何,windows在必要时动态延长堆栈长度。 第三个参数是指向线程函数的指针,该函数可以为任何名字,语法如下DWORD WINAPI ThreadProc(PVOID pParam); 第四个参数就是ThreadProc函数里的参数,这就是主线程和从线程共享的数据。 第五个参数通常为0,但可以为CREATE_SUSPENDED, 这样线程虽然创建了,但不会立即执行,处于挂起状态,直到ResumeThread函数被调用。 第六个参数是指向一个变量的指针,该变量接收线程ID。 创建线程的c函数beginthread( ) c run-time库里的_beginthread函数,在PROCESS.H里声明,语法如下: hThread=_begint
原创力文档


文档评论(0)