2014中职VC++程序设计习题解答:第十章.docVIP

  • 7
  • 0
  • 约2.56千字
  • 约 2页
  • 2017-07-09 发布于江西
  • 举报

2014中职VC++程序设计习题解答:第十章.doc

2014中职VC程序设计习题解答:第十章

10.6 习 题 1.填空题 (1) 进程和线程都是操作系统的概念进程线程是(2) 可以用VC++所带的工具Spy++来观察操作系统管理的进程和线程。 (3) 每一个进程至少有一个主线程线程由系统创建(4) 一般可以使用全局变量和自定义消息进行线程(5) 常用的同步对象有临界区、互斥、信号量和事件。 (6) 为了使用同步类,需要手动将头文件Afxmt.h加到应用程序中。 (7) 使用CSingleLock类的成员函数Lock()请求获得临界区。 (8) CEvent 类对象有人工事件和自动事件两种类型。 2.简答题 (1) 什么叫进程?什么叫线程?它们有什么区别和联系? 进程和线程都是操作系统的概念。进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终止时被释放或关闭。线程是是进程内部的一个执行单元。进程进程系统创建好进程后,实际上就启动执行了该进程的主线程,主线程以函数地址形式 main()或WinMain函数,将程序的启动点提供给系统。主线程终止了,进程也就随之终止。每一个进程至少有一个主线程,它无需由用户去主动创建,是由系统自动创建的。用户根据需要在应用程序中创建其它线程,多个线程并发地运行于同一个进程中。一个进程中的所有线程都在该进程的虚拟地址空间中,共同使用这些虚拟地址空间、全局变量和系统资源 (2) MFC中线程有哪两种类型?它们有何区别?如何创建它们? MFC中有两类线程,分别称之为工作者线程和用户界面线程。 创建一个工作者线程,首先需要编写一个希望与应用程序的其余部分并行运行的自定义函数,该函数称为线程函数。然后,在程序中合适的地方调用全局函数AfxBeginThread()创建线程,以启动线程函数。 创建用户界面线程,首先需要从CWinThread类派生一个新类,并重写派生类的InitInstance()、ExitInstance()及Run()等函数,然后使用AfxBeginThread()函数的另一个版本创建并启动用户界面线程。 (3) 什么是线程函数?其作用是什么?如何给线程函数传递参数? 线程函数是新线程创建后要执行的函数,新线程要实现的功能是由线程函数实现的。线程函数带有一个参数LPVOID pParam,创建线程的AfxBeginThread()全局函数的第二个参数LPVOID pParam的类型与线程函数的参数类型完全一致,该参数为启动线程时传递给线程函数的入口参数。 (4) 如何终止线程? 当一个工作者线程的线程函数执行一个返回语句或者调用AfxEndThread()成员函数时,这个工作者线程就终止。对于用户界面线程,当一个WM_QUIT消息发送到它的消息队列中,或者该线程中的一个函数调用AfxEndThread()成员函数时,该线程就被终止。 一般来说,线程只能自我终止。如果要从另一个线程来终止线程,必须在这两个线程之间设置通信方式。 (5) 如何使用自定义消息进行通信? 使用Windows消息来进行通讯,首先需要定义一个自定义消息,然后,需要时在一个线程中调用全局函数::PostMessage()向另一个线程发送自定义消息。 (6) 什么叫线程的同步?为什么需要同步? 使隶属于同一进程的各线程协调一致地工作称为线程的同步。这是因为在多线程处理时线程之间经常要同时访问一些资源,这有可能导致错误。例如,对于像磁盘驱动器这样独占性系统资源,由于线程可以执行进程的任何代码段,且线程的运行是由系统调度自动完成的,具有一定的不确定性,因此就有可能出现两个线程同时对磁盘驱动器进行操作,从而出现操作错误;又例如,对于银行系统的计算机来说,可能使用一个线程来更新其用户数据库,而用另外一个线程来读取数据库以响应储户的需要,极有可能读数据库的线程读取的是未完全更新的数据库,因为可能在读的时候只有一部分数据被更新过。 (7) MFC提供了哪些类来支持线程的同步?它们分别用在什么场合? MFC为我们提供了几个同步类和同步辅助类来支持线程的同步,这些类及其适用场合如下表所示。 类 名 说 明 同步对象基类CSyncObject 纯虚类,为Win32中的同步对象提供通用性能 临界区类CCriticalSection 当在一个时间内仅有一个线程可被允许修改数据或某些其他控制资源时使用,用于保护共享资源。 互斥类CMutex 有多个应用(多个进程)同时存取相应资源时使用,用于保护共享资源。 信号类CSemaphore 一个应用允许同时有多个线程访问相应资源时使用,主要功能用于资源计数。 事件类CEvent 某个线程必须等待某些事件发生后才能存取相应资源时使用,以协调线程之间的动作。

文档评论(0)

1亿VIP精品文档

相关文档