Visual C++程序设计与应用教程课后答案(4)
创建一个工作者线程,首先需要编写一个希望与应用程序的其余部分并行运行的自定义函数,该函数称为线程函数。然后,在程序中合适的地方调用全局函数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字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [互联网资料]2022年厦门大学机电工程系824机械设计
- [互联网资料]东南大学2022年硕士研究生拟录取名单公
- [互联网资料]能源调研报告(精选多篇)
- [互联网资料]初三英语下学期 中考英语 语法填空训练
- [互联网资料]2022内蒙古选调生行测常识备考:新事物
- [互联网资料]自驾必备!在新西兰租什么样的车自驾游
- [互联网资料]佛教素食菜谱44页未完
- [互联网资料]盈利能力分析外文翻译
- [互联网资料]2022年南昌航空大学音乐学院736马克思
- [互联网资料]优选外贸跟单实习报告总结(精品版)
- [互联网资料]银行新员工培训总结
- [互联网资料]2_year_visa_new_guidance_190316
- [互联网资料]天津市五校宝坻一中静海一中杨村一中芦
- [互联网资料]2007--2008学年第一学期高三数学宁波市
- [互联网资料]Chromatic framework for vision in ba
- [互联网资料]幼儿园大班上学期美术教案《心愿树》含
- [互联网资料]2022年华中农业大学信息学院820微型计
- [互联网资料]硬盘坏道的表现 __硬盘使用久了
- [互联网资料]江苏省2016年会计从业资格考试《会计基
- [互联网资料]公共场所卫生监督试卷全解
- 高级英语第一册所有修辞方法及例子总结
- 综合交通枢纽规划与城市发展
- 沃尔玛的企业文化案例分析
- 美国Thanksgiving Day 感恩节 介绍
- PEP六年级英语上册Unit6How do you fee
- 最齐全的中国大型商场购物中心名单
- 数据结构实验报告八—哈夫曼编译码
- 杭州市余杭区人民政府(通知)
- 七年级语文成语运用专项训练
- 微观经济学第三章 消费者行为 课后习题
- 对_钱学森之问_的思考
- Excel_三级联动_下拉菜单
- 办公用品需求计划申请表
- 对外汉语教材必须要知道的发展史
- 挑战杯大学生学术科技作品竞赛作品申报
- 举办民办教育培训机构应具备下列条件
- 太阳能路灯项目设计方案
- 2013年八年级上最新人教版新教材Unit3I
- 【历史】 6-4 《近代科学之父牛顿》 课
- 高中生物《第四章 第二节 探讨加酶洗衣




