首页 资讯 电脑入门 操作系统 上网 办公 技巧 硬件 软件 网络 图像 多媒体 程序 数据库 网页网站 网游 安全 加密 企业

浅议Visual C++多线程设计

巧巧电脑网络 2006-01-18 论坛 高智杰   收藏此文 
多任务的实现基于两方面,即多进程和多线程。2 多线程及其设计思路在Windows操作系统中,Win32应用程序可以在Windows平台上运行多个实例,每个应用程序实例都是一个独立的进程,而一个进程可以由不止一个线程来实现。

  1 引言

  随着Windows操作系统的发展,Windows95 和WindowsNT 操作系统开始支持多任务的调度和处理。基于此,其所提供的多任务空间使程序员可以完全控制应用程序中细节的运行,从而编写高效率的应用程序。

  多任务的实现基于两方面,即多进程和多线程。所谓进程是指在系统中正在运行的一个应用程序,而线程是系统分配处理器时间资源的基本单元,也可讲是进程之内独立执行的一个单元。利用多线程技术,在VC环境下使一个进程从主线程的执行开始进而创建一个或多个附加线程,达到多线程多任务的实现。

  2 多线程及其设计思路

  在Windows操作系统中,Win32应用程序可以在Windows平台上运行多个实例,每个应用程序实例都是一个独立的进程,而一个进程可以由不止一个线程来实现。与Win16应用程序的协同多任务方式不同,Win32应用程序组采取的是抢占式多任务方式,即同时执行多个进程和多个线程。线程具体讲是一个代码单元,在操作系统中运行是标志着代码运行流。

  每个进程都有私有的虚拟地址空间,进程的所有线程共享同一地址空间。每个线程被CPU分配一个时间片,一旦被激活,它正常运行直到时间片耗尽并被挂起,此时,操作系统选择另一个线程进行运行。通过时间片轮转,又出于各个时间片很小(20毫秒级),看起来就像多个线程同时在工作。实际上,只有在多处理器系统上才是真正的在可得到的处理器上同时运行多个线程。基于Win32的应用程序可以通过把给定进程分解(或创建)多个线程挖掘潜在的CPU时间,而且还可以加强应用程序,以使用户提高效率,加强反应能力以及进行后台辅助处理。

  对于一个进程来说,当应用程序有几个任务要同时运行时,建立多个线程是有用的。如打印时,利用多线程机制实现多线程,就可在需要打印时创建一个负责完成打印功能的打印线程。创建打印线程之后,系统就变成了多线程。当进行打印时,CPU轮换着分配给这两个线程时间片,所以打印和其他功能一起同时在运行,这就充分利用了CPU处理打印工作之外的空闲时间片,并且避免了用户长久地等待打印时间。这就是所谓的由多线程来实现的多任务,在进行打印任务的同时又可以进行别的任务。

  在VC中利用MFC编程时,线程被分为工作者线程(Worker Thread)和用户界面线程(User Interface Thread)两大类。前者常用于处理后台任务,执行这些后台任务并不会耽搁用户对应用程序的使用,即用户操作无需等待后台任务的完成。后者常用来独立的处理用户输入和相应用户的事件。其中用户界面线程的特点是拥有单独的消息队列,可以具有自己的窗口界面,能够对用户输入和事件做出响应。在应用程序中,根据用户界面线程具有消息队列这一特点,可以使之循环等待某一事件发生后再进行处理。由于Windows95时抢先式多任务的操作系统,即使一个线程因等待某事件而阻塞,其他线程仍然可以继续执行。

扩展阅读:Visual C++ 入门精解

常用的一般数据类型的前缀前缀类型内存规格描述例子chchar8-bit characterchGradechTCHAR16-bit character if _UNICODE is definedchNamebBOOLBoolean valuebEnablednintInteger (size dependent on operating system)nLengthnUINTUnsigned value (size dependent on operating system)nLengthwWORD16-bit unsigned valuewPoslLONG32-bit signed integerlOffsetdwDWORD32-bit unsigned integerdwRangep*Ambient memory model pointerpDoclpFAR*Far pointerlpDoclpszLPSTR32-bit pointer to character stringlpszNamelpszLPCSTR32-bit pointer to constant character stringlpszNamelpszLPCTSTR32-bit pointer to constant character string if _UNICODE is definedlpszNamehhandleHandle to Windows objecthWndlpfn(*fn)()callbackFar pointer to CALLBACK functionlpfnAbort常用Windows对象名称缩写Windows 对象例子变量MFC类例子对象HWNDhWnd。

本类最热图文
Google
巧巧电脑网络编辑信箱  告诉我们您想看的专题或文章