教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 互联网资料 >

Visual C++程序设计与应用教程课后答案(4)

来源:网络收集 时间:2026-09-14
导读: 创建一个工作者线程,首先需要编写一个希望与应用程序的其余部分并行运行的自定义函数,该函数称为线程函数。然后,在程序中合适的地方调用全局函数AfxBeginThread()创建线程,以启动线程函数。 创建用户界面线程,

创建一个工作者线程,首先需要编写一个希望与应用程序的其余部分并行运行的自定义函数,该函数称为线程函数。然后,在程序中合适的地方调用全局函数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 临界区类CCriticalSection 互斥类CMutex 信号类CSemaphore 事件类CEvent

同步辅助类CSingleLock、CMultiLock

说 明

纯虚类,为Win32中的同步对象提供通用性能

当在一个时间内仅有一个线程可被允许修改数据或某些其他控制资源时使用,用于保护共享资源。

有多个应用(多个进程)同时存取相应资源时使用,用于保护共享资源。 一个应用允许同时有多个线程访问相应资源时使用,主要功能用于资源计数。

某个线程必须等待某些事件发生后才能存取相应资源时使用,以协调线程之间的动作。

用于在一个多线程程序中控制对资源的访问。当在一个时间只需等待一个同步化对象时使用CSingleLock,否则使用CMultiLock

(8) 如何使用CSemaphore类实现多线程同步?

使用CSemaphore类实现多线程同步,有两种用法。 方法一:单独使用CSemaphore对象,步骤如下:

? 定义CSemaphore类的一个全局对象(以使各个线程均能访问)

? 在访问临界区之前,调用CSemaphore类的成员Lock()获得临界区。 ? 在本线程中访问临界区中的共享资源。

? 访问临界区完毕后,使用CSemaphore的成员函数UnLock()来释放临界区。

方法二:与同步辅助类CSingleLock或CMutiLock类一起使用,步骤如下(以类CSingleLock为例):

? 定义CSemaphore类的一个全局对象,如critical_section

? 在访问临界区之前,定义CSingleLock类的一个对象,并将critical_section的地址传

送给构造函数

? 使用CSingleLock类的成员函数Lock()请求获得临界区。 ? 在本线程中访问临界区中的共享资源。

? 调用CSingleLock类的成员函数UnLock()来释放临界区。

11.6 习 题

1. 填空题

(1) MFC的ODBC类主要包括5个类,分别是CDatabase类、CRecordset类、 CRecordView类 、 CFieldExchange类 、 CDBException类 ,其中CRecordset类是用户实际使用过程中最关心的。

(2) CDatabase类的作用是建立与数据源的连接 。

(3) CRecordset类的功能是对表记录进行操作的许多功能,如添加记录、删除记录、修改记录、查询记录等,并能直接为数据源中的表映射一个CRecordset类对象,方便用户的操作。

(4) CRecordView的作用是 显示数据库记录。利用对话框数据交换机制DDX在记录集与表单视图的控件之间传输数据。

(5) 可以利用CRecordset类的成员函数AddNew() 添加一条新记录;可以利用CRecordset类的成员函数MoveFirst() 将记录指针移动到第一条记录上;可以利用CRecordset类的成员函数 Update() 完成保存记录的功能。

(6) 在CRecordset类中提供了两个公有数据成员m_strFilter和m_strSort,分别用来设置对记录的查找和排序。

(7) ADO对象模型提供了7种对象,它们分别是 连接对象 、命令对象 、记录集对象 、域对象 、参数对象 、属性对象 、错误对象。

(8) 在Visual C++中使用ADO开发数据库之前,需要用#import引入ADO,其语句格式为: #import \Files\\common files\\system\\ado\\msado15.dll\no_namespace rename(\(9) 在使用ADO开发数据库时,常用的三个智能指针为:_ConnectionPtr 、_CommandPtr和_RecordsetPtr。

(10) Connection对象的ConnectionString属性表示连接数据库的字符串,CursorLocation属性用来指定光标引擎的位置。

2.简答题

(1) Visual C++中都提供了哪些访问数据库的技术?它们有何特点?

Visual C++中都提供了ODBC、DAO、OLE DB和ADO等访问数据库的技术。 ? ODBC

ODBC是为应用程序访问关系数据库时提供的一个标准的基于SQL的统一接口。对于不同的数据库,ODBC提供了一套统一的API,使应用程序可以利用所提供的API来访问任何提供了ODBC驱动程序的数据库,而且,ODBC已经成为一种标准,目前所有的关系数据库都提供了ODBC驱动程序,这使得ODBC的应用非常广泛,基本上可用于所有的关系数据库。

由于ODBC是一种底层的访问技术,因此,ODBC API可以使客户应用程序从底层设置和控制数据库,完成一些高层数据库技术无法完成的功能。

直接使用ODBC API编写应用程序需要编制大量的代码,Visual C++6.0提供了MFC ODBC类,其中封装了ODBC API,因此,使得用MFC来创建ODBC的应用程序非常简单。

? DAO

DAO提供了一种通过程序代码创建和操作数据库的机制。DAO类似于用Access或Visual Basic编写的数据库应用程序,它使用微软公司的Jet数据库引擎形成一系列的数据访问对象:数据库对象、表和查询对象、记录集对象等,各个对象协同工作。

DAO支持以下4个数据库选项:可以打开一个Access数据库文件(*.mdb文件),直接打开一个ODBC数据源,使用Jet引擎打开一个ISAM (被索引的顺序访问方法)类型的数据源以及把外部表附属到Access数据库。

…… 此处隐藏:6955字,全部文档内容请下载后查看。喜欢就下载吧 ……
Visual C++程序设计与应用教程课后答案(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/445757.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)