欢迎来到天天文库
浏览记录
ID:51493201
大小:308.34 KB
页数:37页
时间:2020-03-25
《多线程编程基础.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Windows编程基础1第九章多线程编程基础本课程旨在向学员介绍:1)线程基础知识时间:学时32)进程与线程的区别教学方法:讲授+课上3)使用WIN32和MFC编写多线练习+课下作业程程序2多线程概述•大多数操作系统,可以同时运行几个程序,操作系统的这种能力称之为多任务处理。•Windows操作系统用多进程/线程机制提供对一个应用程序内多任务的支持,进程与线程之间是密不可分的,线程依附于进程,一个进程可包含多个线程。3多线程的引入-1/2•按照如下步骤创建应用程序:–创建一个基于对话框的应用程序,名字是Sin
2、gleThread–在对话框中添加一个按钮。–添加响应函数代码:–Sleep(6000);•观察程序的运行效果.–点击按钮后,程序在这六秒钟像“死机”一样。–原因分析:因为Sleep函数一直独占CPU的时间。点击“Sleep”CPU一直运行Sleep(6秒)6秒结束执行其他内容4多线程的引入-2/2•引入多线程的原因是单线程容易阻塞!•如何解决?•首先,要有抢先式多任务操作系统为基础•最好能够生成两个控制流程:–一个负责其中的长时间处理过程。–另外一个负责响应用户及系统消息,各司其职,则上述对话框的界面就会得
3、到及时更新。5抢先式多任务操作系统•工作原理:在WIN32系统中,程序对CPU的占用时间是由系统分配的,而不是由程序决定的.•当系统分配的时间片到时收回CPU的控制权交给其它程序,这种管理方式称抢先式多任务.•优点:–一个应用程序崩溃一般不会造成死机.–在进行后台费时的工作时不会导致系统挂起.6进程和线程的概述-1/3•系统既可以同时启动多个进程,也支持同时运行多个线程,它们之间有什么差别?•进程和线程都是操作系统的概念。•进程是什么?–进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其
4、它各种系统资源组成,进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终止时被释放或关闭。7进程和线程的概述-2/3•线程是什么?–线程是进程内部的一个执行单元。系统创建好进程后,实际上就启动执行了该进程的主执行线程,主执行线程以函数地址形式,比如说WinMain函数,将程序的启动点提供给Windows系统。主执行线程终止了,进程也就随之终止。–每一个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。用户根据需要在应用程序中创建其它线程,多个线程并发地运行于同一个进程
5、中。一个进程中的所有线程都在该进程的虚拟地址空间中,共同使用这些虚拟地址空间、全局变量和系统资源,所以线程间的通讯非常方便,多线程技术的应用也较为广泛。8进程和线程的概述-3/3•多线程编程在Win32方式下和MFC类库支持下的原理是一致的,进程的主线程在任何需要的时候都可以创建新的线程。当线程执行完后,自动终止线程;当进程结束后,所有的线程都终止。所有活动的线程共享进程的资源,因此,在编程时需要考虑在多个线程访问同一资源时产生冲突的问题。当一个线程正在访问某进程对象,而另一个线程要改变该对象,就可能会产生错
6、误的结果,编程时要解决这个冲突.9为什么不使用多进程-1/2•1)由于创建新进程必须加载代码,而线程要执行的代码已经被映射到进程的地址空间,所以创建、执行线程的速度比进程更快。•2)一个进程的所有线程共享进程的地址空间和全局变量,所以简化了线程之间的通讯10为什么不使用多进程-2/2•使用多进程,最困难的是如何把窗口句柄交给另一个进程。在Win32中,句柄只在他的诞生进程中才有意义,这样避免某个进程危及另一个进程资源。而在一个多线程程序中,所有线程都可以使用这个窗口句柄,因为句柄和线程在同一进程中。•虽然请求
7、产生新进程也容易,但他的额外负担非常惊人。必须载入服务器软件的一个全新副本,配置大量内存并初始化,新副本必须与原先状态相同,数秒钟可能就这样过去了…11使用线程要注意•使用线程并非没有代价。可能引发潜在的严重为题,需要小心设计。•写线程:小心做计划:谁要什么?何时要?怎么要?12编制多线程程序两种方式•Win32API–32位Windows环境下的Win32API提供了多线程应用程序开发所需要的接口函数。•MFC方式–VC中提供的标准C库也可以开发多线程应用程序,相应的MFC类库封装了多线程编程的类,用户在开
8、发时可根据应用程序的需要和特点选择相应的工具。13Win32API下的多线程编程•Win32API是Windows操作系统内核与应用程序之间的界面,它将内核提供的功能进行函数包装,应用程序通过调用相关函数而获得相应的系统功能。为了向应用程序提供多线程功能,Win32API函数集中提供了一些处理多线程程序的函数集。•应用Win32API进行程序设计的优点:基于Win32的应用程序执行代码小,运行效率高
此文档下载收益归作者所有