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

《美河提供.基于Windows的多线程编程》
  • 片  名  《美河提供.基于Windows的多线程编程》
  • 简  介  对白语言: 普通话
  • 类  别  资料
  • 小  类  计算机教程


  • 详细介绍中文名: 美河提供.基于Windows的多线程编程地区: 大陆对白语言: 普通话简介:
    [attachmentid=325513进程与线程
    进程和线程是两个相对的概念,通常来说,一个进程可以定义程序的一个实例(Instance)。在Win32中,进程并不执行什么,它只是占据应用程序所使用的地址空间。为了让进程完成一定的工作,进程必须至少占有一个线程,正是这个线程负责包含进程地址空间中的代码。实际上,一个进程可以包含几个线程,它们可以同时执行进程地址空间中的代码。为了做到这一点,每个线程有自己的一组CPU寄存器和堆栈。每个进程中至少有一个线程在执行其地址空间中的代码。如果没有线程执行进程地址空间中的代码,进程也就没有继续存在的理由,系统将自动清除进程及其地址空间。
    多线程的实现原理
    创建一个进程时,它的第一个线程称为主线程(Primary thread),由系统自动生成。然后可以由这个主线程生成额外的线程,而这些线程,又可以生成更多的线程。
    在运行一个多线程的程序时,从表面上看,这些线程似乎在同时运行。而实际情况并非如此,为了运行所有的这些线程,操作系统为每个独立线程安排一些CPU时间。单CPU操作系统以轮转方式向线程提供时间片(Quantum),每个线程在使用完时间片后交出控制,系统再将CPU时间片分配给下一个线程。由于每个时间片足够的短,这样就给人一种假象,好像这些线程在同时运行。创建额外线程的唯一目的就是尽可能地利用CPU时间。
    多线程的问题
    使用多线程编程可以给程序员带来很大的灵活性,同时也使原来需要复杂技巧才能解决的问题变得容易起来。但是,不应该人为地将编写的程序分成一些碎片,让这些碎片按各自的线程执行,这不是开发应用程序的正确方法。
    线程很有用,但当使用线程时,可能会在解决老问题的同时产生新问题。例如要开发一个字处理程序,并想让打印功能作为单独的线程自己执行。这听起来是很好的主意,因为在打印时,用户可立即返回,开始编辑文档。但这样一来,在该文档被打印时文档中的数据就有可能被修改,打印的结果就不再是所期望的内容。也许最好不要把打印功能放在单独的线程中,不过如果一定要用多线程的话,也可以考虑用下面的方法解决:第一种方法是锁定正在打印的文档,让用户编辑其他的文档,这样在结束打印之前,该文档不会作任何修改;另一个方法可能更有效一些,即可以把该文档拷贝到一个临时文件中,打印这个临时文件的内容,同时允许用户对原来的文档进行修改。当包含文档的临时文件打印完成时,再删去这个临时文件。
    通过上面的分析可以看出,多线程在帮助解决问题的同时也可能带来新问题。因此有必要弄清楚,什么时候需要创建多线程,什么时候不需要多线程。总的来说,多线程往往用于在前台操作的同时还需要进行后台的计算或逻辑判断的情况,而对于GUI(图形用户接口),除了开发MDI(多文档界面)应用程序外,应尽量不使用多线程。
    线程的分类
    在MFC中,线程被分为两类,即工作线程和用户界面线程。如果一个线程只完成后台计算,不需要和用户交互,那么可以使用工作线程;如果需要创建一个处理用户界面的线程,则应使用用户界面线程。这两者的主要区别在于,MFC框架会给用户界面线程增加一个消息循环,这样用户界面线程就可以处理自己消息队列中的消息。这样看来,如果需要在后台作一些简单的计算(如对电
  • 《美河提供.基于Windows的多线程编程》_large