图书介绍

基于C++ CORBA高级编程2025|PDF|Epub|mobi|kindle电子书版本百度云盘下载

基于C++ CORBA高级编程
  • (美)Michi Henning,(美)Steve Vinoski著;徐金梧等译 著
  • 出版社: 北京:清华大学出版社
  • ISBN:7302039569
  • 出版时间:2000
  • 标注页数:740页
  • 文件大小:36MB
  • 文件页数:759页
  • 主题词:

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

基于C++ CORBA高级编程PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第1章 导论1

1.1 简介1

1.2 本书内容的组织2

1.3 CORBA版本问题3

1.4 源代码示例3

1.5 有关软件供应商4

1.6 如何与作者联系4

第1部分 CORBA简介5

第2章 CORBA概述5

2.1 简介5

2.2 对象管理组6

2.3 概念和术语7

2.4 CORBA特性9

2.4.1 一般请求流9

2.4.2 OMG接口定义语言10

2.4.3 语言映射11

2.4.4 操作调用和调度软件12

2.4.5 对象适配器13

2.4.6 ORB间协议14

2.5 请求调用14

2.5.1 对象引用语义15

2.5.2 引用的获取17

2.5.3 对象引用的内容18

2.5.4 引用和代理19

2.6 CORBA应用程序的一般开发过程20

2.7 本章小结22

第3章 一个最小的CORBA应用程序23

3.1 本章概述23

3.2 编写和编译一个IDL定义23

3.3 编写和编译一个服务器程序24

3.4 编写和编译一个客户机程序28

3.6 本章小结31

3.5 运行客户机和服务器程序31

第2部分 CORBA的核心33

第4章 OMG接口定义语言33

4.1 本章概述33

4.2 简介33

4.3 编译34

4.3.1 单个的客户机和服务器程序的开发环境34

4.3.2 客户机和服务器程序的不同开发环境35

4.4 源文件36

4.4.1 文件的命名36

4.4.2 文件格式36

4.5.2 关键字37

4.5.1 注释37

4.5.3 标识符37

4.4.3 预处理37

4.4.4 定义的顺序37

4.5 词法规则37

4.6 基本的IDL类型38

4.6.1 整型39

4.6.2 浮点类型39

4.6.3 字符39

4.6.6 八位字节40

4.6.7 any类型40

4.6.5 布尔量40

4.6.4 字符串40

4.7 用户定义类型41

4.7.1 命名类型41

4.7.2 枚举41

4.7.3 结构42

4.7.4 联合43

4.7.5 数组45

4.7.6 序列45

4.7.7 序列与数组46

4.7.8 递归类型47

4.7.9 常量定义和字面值49

4.7.10 常量表达式51

4.8 接口和操作52

4.8.1 接口语法53

4.8.2 接口语义和对象引用54

4.8.3 接口通信模型55

4.8.4 操作定义55

4.9 用户异常58

4.9.1 异常设计问题59

4.10 系统异常61

4.11 系统异常或用户异常63

4.12 单向操作(oneway operation)64

4.13 上下文(contexts)65

4.14 属性(Attributes)66

4.15 模块(Modules)67

4.16 前向声明(Forward Declarations)68

4.17 继承(Inheritance)70

4.17.1 从类型object中隐含的继承70

4.17.2 空接口(Empty Interface)71

4.17.3 接口与实现的继承72

4.17.5 继承的限定73

4.17.4 继承的重定义规则73

4.17.6 多重继承74

4.17.7 多重继承的限定75

4.18 名称和作用域76

4.18.1 命名作用域76

4.18.2 区分大小写76

4.18.3 在嵌套作用域中的名称77

4.18.4 名称查找规则77

4.19 仓库标识符和pragma指令79

4.19.1 IDL的仓库ID格式79

4.19.2 prefix的附注80

4.19.4 使用ID附注来控制仓库的ID格式81

4.19.3 版本(version)附注81

4.20 标准的include文件82

4.21 最新的IDL扩展82

4.21.1 宽位字符和字符串82

4.21.2 64位整型83

4.21.3 扩展的浮点类83

4.21.4 定点十进制类型83

4.21.5 转义标识符84

4.22 本章小结85

5.2.1 温度计86

5.2 气温控制系统86

第5章 一个气温控制系统的IDL86

5.1 本章概述86

5.2.2 恒温器87

5.2.3 监测站87

5.3 气温控制系统的IDL87

5.3.1 温度计的IDL88

5.3.2 恒温器的IDL88

5.3.3 控制器的IDL89

5.4 完整的程序92

6.2 简介94

第6章 基本的IDL到C++的映射94

6.1 本章概述94

6.3 标识符的映射95

6.4 模块的映射96

6.5 CORBA模块97

6.6 基本类型的映射97

6.6.1 64位整型和long double类型98

6.6.2 基本类型的重载98

6.6.6 字符串和宽位字符串映射99

6.6.5 Boolean映射99

6.6.4 wchar的映射99

6.6.3 可映射成char的类型99

6.7 常量的映射100

6.8 枚举类型的映射102

6.9 变长度的类型与_var类型102

6.9.1 _var类型的使用103

6.9.2 变长度类型的内存管理105

6.10 String_var封装类106

6.10.1 使用String_var的缺陷109

6.10.2 将字符串作为传递参数以读取字符串111

6.10.3 将字符串作为传递参数以更改字符串112

6.10.4 隐式类型转换产生的问题113

6.10.5 取得对字符串的所有权115

6.10.6 流运算符116

6.11 宽位字符串的映射116

6.12 定点数类型的映射116

6.12.1 构造函数117

6.12.2 存取函数118

6.12.3 转换运算符118

6.12.4 截断与舍入118

6.13.1 定长度结构的映射119

6.13 结构的映射119

6.12.6 流运算符119

6.12.5 算术运算符119

6.13.2 变长度结构的映射120

6.13.3 结构的内存管理122

6.13.4 包含结构成员的结构123

6.14 序列的映射124

6.14.1 无界序列的映射124

6.14.2 有界序列的映射134

6.14.3 序列使用中的一些限制135

6.14.4 序列的使用规则137

6.15 数组的映射137

6.16 联合的映射139

6.16.1 联合的初始化和赋值140

6.16.2 联合的成员与鉴别器的访问141

6.16.3 没有default语句的联合142

6.16.4 包含复杂成员的联合144

6.16.5 使用联合的规则145

6.17 递归结构和递归联合的映射146

6.18 类型定义的映射146

6.19 用户定义类型和_var类147

6.19.1 用于结构、联合和序列的_var类148

6.19.2 _var类的简单使用149

6.19.4 定长度的结构、联合和序列与变长度的结构、联合和序列之间的区别150

6.19.3 使用_var类的一些缺陷150

6.19.5 数组的_var类型152

6.20 本章小结155

第7章 客户端的C++映射156

7.1 本章概述156

7.2 简介156

7.3 接口的映射156

7.4 对象引用类型157

7.5 对象引用的生命周期158

7.5.1 删除引用159

7.5.2 引用拷贝160

7.5.3 引用计数值的范围161

7.5.4 空引用161

7.6 _ptr引用的语义163

7.6.1 代理与_ptr引用的映射163

7.6.2 继承与拓展165

7.6.3 紧缩转换167

7.6.4 类型安全的紧缩(Narrowing)167

7.6.5 非法使用_ptr引用168

7.7 伪对象169

7.8 ORB的初始化170

7.9 初始引用171

7.9.1 将字符串转换成引用172

7.9.2 将引用转换成字符串174

7.10 字符串化引用175

7.10.1 初始的字符串化引用175

7.10.2 字符串化引用的长度175

7.10.3 字符串化引用的互用性176

7.10.4 字符串化引用的规则176

7.11 对象伪接口176

7.11.1 _is_a操作177

7.11.2 _non_existent操作178

7.11.3 _is_equivalent操作180

7.11.4 _hash操作181

7.11.5 Object操作映射小结182

7.12 _var引用182

7.12.1 _var引用的映射183

7.12.2 _var引用与拓展186

7.12.3 同时使用_var和_ptr引用187

7.12.4 嵌套在用户定义类型中的引用189

7.12.5 _var类型的效率190

7.13 操作与属性的映射191

7.13.1 操作的映射191

7.13.2 属性的映射192

7.14 参数传递规则193

7.14.1 定长度类型与变长度类型194

7.14.2 生成的_out类型195

7.14.3 简单类型的参数传递195

7.14.4 复杂的定长度类型的参数传递196

7.14.5 包含定长度元素的数组的参数传递197

7.14.6 变长度参数的内存管理200

7.14.7 字符串和宽位字符串的参数传递203

7.14.8 复杂变长度类型和Any类型的参数传递205

7.14.9 包含变长度元素数组的参数传递206

7.14.10 对象引用的参数传递208

7.14.11 参数传递规则的小结209

7.14.12 使用_var类型来传递参数210

7.14.13 释放out参数和使用_out类型的目的213

7.14.14 参数的只读性质215

7.14.15 参数传递的陷阱216

7.15 异常映射218

7.15.1 系统异常的映射220

7.15.2 系统异常的语义223

7.15.3 用户异常的映射226

7.15.4 异常说明227

7.15.6 ostream插入符228

7.15.5 异常和out参数228

7.15.7 不支持异常的编译器中的映射229

7.16 上下文的映射230

7.17 本章小结230

第8章 开发气温控制系统的客户程序231

8.1 本章概述231

8.2 简介231

8.3 客户程序的总体结构231

8.4 包含文件232

8.5 辅助函数233

8.5.1 显示装置的具体内容233

8.5.2 打印出错异常信息235

8.6 main函数237

8.6.1 初始化237

8.6.2 与服务器程序的交互238

8.7 完整的客户程序代码243

8.8 本章小结248

第9章 服务器端C++映射250

9.1 本章概述250

9.2 简介250

9.3 接口的映射251

9.4 伺服类252

9.5 对象的实体253

9.6 服务器程序的main函数254

9.7 参数传递规则256

9.7.1 简单类型的参数传递256

9.7.2 复杂的定长度类型的参数传递257

9.7.3 包含定长度元素数组的参数传递258

9.7.4 字符串和宽位字符串的参数传递260

9.7.5 复杂的变长度类型和any类型的参数传递262

9.7.6 包含变长度元素数组的参数传递265

9.7.7 对象引用的参数传递267

9.8 引发异常270

9.8.1 异常发送的具体细节271

9.8.2 发送CORBA系统异常272

9.8.3 管理出现异常的内存272

9.9 Tie类275

9.9.1 tie类的具体细节275

9.9.2 tie伺服程序的具体化276

9.9.3 tie类的评价277

9.10 本章小结278

10.3 仪器控制协议的API280

10.2 简介280

10.1 本章概述280

第10章 开发气温控制系统的服务器程序280

10.3.1 添加和删除装置281

10.3.2 读取属性值282

10.3.3 写属性值282

10.4 设计温度计的伺服类283

10.5 实现温度计的伺服类285

10.5.1 Thermometer_impl辅助函数285

10.5.2 Thermometer_impl的IDL操作286

10.6 设计恒温器的伺服类287

10.5.3 Thermometer_impl的构造函数和析构函数287

10.7 实现Thermostat的伺服类289

10.7.1 Thermostat_impl辅助函数289

10.7.2 Thermostat_impl的IDL操作291

10.7.3 Thermostat_impl的构造函数和析构函数291

10.8 设计控制器的伺服类292

10.9 实现控制器的伺服类294

10.9.1 Controller_impl辅助函数294

10.9.2 实现list操作294

10.9.3 实现change操作295

10.9.4 实现find操作296

10.10 实现服务器程序的main函数298

10.11.1 server.hh头文件299

10.11 完整的服务器程序代码299

10.11.2 server.cc实现文件302

10.12 本章小结310

第11章 可移植的对象适配器311

11.1 本章概述311

11.2 简介311

11.3 POA基本原理311

11.3.1 基本的请求调度313

11.3.2 关键的POA实体313

11.4 POA策略314

11.4.1 CORBA对象生存期范围315

11.4.2 对象标识符316

11.4.3 对象到伺服程序之间的映射318

11.4.4 隐式激活320

11.4.5 请求与伺服程序之间的匹配320

11.4.6 ObjectId到伺服程序的关联321

11.4.7 请求到线程的分配322

11.4.8 策略工厂操作(Policy Factory Operations)323

11.5 POA创建324

11.6 Servant IDL类型327

11.6.1 CCS::Thermometer伺服程序328

11.7.1 对象创建330

11.7 对象创建和激活330

11.7.2 伺服程序注册336

11.7.3 伺服程序管理器340

11.7.4 默认的伺服程序351

11.7.5 伺服程序内存管理356

11.7.6 请求处理359

11.8 引用、ObjectId和伺服程序360

11.9 对象失效362

11.10 请求流控制364

11.11 ORB事件处理367

11.11.2 非阻塞事件处理368

11.11.1 阻塞事件处理368

11.11.3 应用程序停止运行369

11.12 POA激活372

11.13 POA析构377

11.14 应用POA策略378

11.14.1 多线程问题379

11.14.2 ObjectId赋值380

11.14.3 激活380

11.14.4 时空折衷380

11.14.5 关于生命范围的考虑382

11.15 本章小结385

12.2 简介386

第12章 对象生命周期386

12.1 本章概述386

12.3 对象工厂387

12.3.1 工厂设计选项388

12.3.2 用C++实现工厂393

12.4 撤消、拷贝以及移动对象396

12.4.1 撤消对象398

12.4.2 拷贝对象405

12.4.3 移动对象407

12.5.1 设计的通则408

12.5 对生命周期服务的评论408

12.4.4 通用工厂408

12.5.2 发布日期409

12.5.3 使用move操作的问题409

12.5.4 接口的粒度411

12.5.5 在什么情况下使用生命周期服务412

12.6 Evictor模式412

12.6.1 基本的收回策略413

12.6.2 维护LRU顺序415

12.6.3 使用伺服程序定位器实现收回模型416

12.6.4 对使用伺服程序定位器的收回模型的评价419

12.6.5 使用伺服程序激活器来实现收回模型420

12.6.6 对使用伺服程序激活器的收回模型的评价424

12.6.7 与汇集管理器操作的交互425

12.7 伺服程序的无用存储单元回收427

12.7.1 客户机意外行为的处理427

12.7.2 通过关机进行无用存储单元回收428

12.7.3 使用收回模型进行无用存储单元回收429

12.7.4 使用超时进行无用存储单元回收429

12.7.6 每个对象逆向保持激活430

12.7.5 显式保持激活430

12.7.7 每个客户逆向保持激活431

12.7.8 检测客户的断连432

12.7.9 分布式引用计数432

12.7.10 选择方案小结433

12.8 CORBA对象的无用存储单元回收433

12.8.1 太平洋问题434

12.8.2 引用完整性435

12.8.3 无用存储单元回收的未来435

12.9 本章小结435

13.2 GIOP概述436

13.1 本章概述436

13.2.1 传输假设436

第13章 GIOP,IIOP和IOR436

第3部分 CORBA机理436

13.3 公共数据表示437

13.3.1 CDR数据对齐438

13.4 GIOP消息格式440

13.4.1 Request消息格式443

13.4.2 Reply消息格式445

13.4.3 其他消息格式446

13.5 GIOP连接管理447

13.6 检测无序的关闭448

13.7 IIOP综述449

13.8 IOR的结构450

13.9 双向IIOP452

13.10 本章小结453

第14章 实现仓库和绑定454

14.1 本章概述454

14.2 绑定模式454

14.3 直接绑定454

14.3.1 暂态引用的直接绑定455

14.3.2 持久引用的直接绑定456

14.4 通过实现仓库的间接绑定457

14.4.1 实现仓库的标准一致性457

14.4.2 实现仓库结构458

14.4.3 定位域459

14.4.4 服务器程序和实现仓库之间的相互影响460

14.4.5 通过实现仓库的绑定460

14.4.6 绑定优化462

14.5 迁移、可靠性、性能和可扩展性465

14.5.1 小定位域465

14.5.2 大定位域465

14.5.3 冗余的实现仓库465

14.5.4 对象迁移的粒度466

14.6 激活模式467

14.5.5 跨定位域边界的迁移467

14.7 竞争状态468

14.7.1 激活期间的竞争状态468

14.7.2 关闭期间的竞争状态469

14.7.3 服务器程序关闭和重新绑定469

14.8 安全性考虑470

14.8.1 服务器程序的权限470

14.8.2 远程仓库访问471

14.8.3 通过防火墙的IIOP472

14.9 本章小结472

15.2 简介474

15.1 本章概述474

第15章 any类型的C++映射474

第4部分 动态CORBA474

15.3 any类型C++映射477

15.3.1 构造函数,析构函数和赋值478

15.3.2 基本类型478

15.3.3 重载不可区分的类型480

15.3.4 无界的字符串的插入和提取482

15.3.5 有界的字符串的插入和提取483

15.3.6 宽位字符串的插入和提取485

15.3.7 定点类型的插入和提取485

15.3.8 用户定义类型486

15.3.9 插入和提取Any491

15.3.10 插入和提取异常492

15.4 类型定义中易出现的问题493

15.5 本章小结494

第16章 类型代码495

16.1 本章概述495

16.2 简介495

16.3 TypeCode伪对象495

16.3.1 适用于所有类型代码的类型和操作497

16.3.2 类型代码参数498

16.3.3 作为值的类型代码502

16.4 TypeCode伪对象的C++映射503

16.5 类型代码比较513

16.5.1 TypeCode::equal的语义514

16.5.2 TypeCode::equivalent的语义515

16.5.3 为什么让类型代码中的名称是可选项516

16.5.4 类型代码比较的可移植性517

16.5.5 从any类型提取的语义517

16.6.1 内置类型的常量518

16.6 类型代码常量518

16.5.7 get_compact_typecode操作518

16.5.6 结构上的等价518

16.6.2 自定义类型的常量520

16.7 any类型的类型代码比较521

16.7.1 控制在Any类型中插入的别名信息521

16.7.2 检验从Any类型中提取的别名信息521

16.8 动态创建类型代码522

16.8.1 用于类型代码创建的IDL522

16.8.2 类型代码创建的C++映射525

16.9 本章小结529

17.3 DynAny接口530

17.2 简介530

17.1 本章概述530

第17章 DynAny类型530

17.3.1 局部约束531

17.3.2 用于DynAny的IDL531

17.3.3 用于DynEnum的IDL536

17.3.4 用于DynStruct的IDL536

17.3.5 用于DynUnion的IDL537

17.3.6 用于DynSequence的IDL537

17.3.8 用于DynFixed的IDL538

17.3.7 用于DynArray的IDL538

17.4 DynAny伪对象的C++映射539

17.4.1 简单类型的DynAny应用539

17.4.2 使用DynEnum541

17.4.3 使用DynStruct543

17.4.4 使用DynUnion546

17.4.5 使用DynSequence549

17.5 用于通用显示的DynAny549

17.6 获得类型信息551

17.6.1 从OMG接口仓库获得类型信息551

17.6.3 从表达式获得类型信息552

17.7 本章小结552

17.6.2 从转换表中获得类型信息552

第5部分 CORBA服务553

第18章 OMG命名服务553

18.1 本章概述553

18.2 简介553

18.3 基本概念553

18.4 命名服务IDL的结构555

18.5 名称的语义555

18.5.1 名称结构555

18.5.2 名称的表达556

18.5.4 不支持宽位字符串557

18.5.3 kind字段的作用557

18.5.5 名称的等价性558

18.5.6 绝对与相对名称558

18.5.7 名称解析559

18.6 命名上下文的IDL559

18.6.1 命名服务中的异常559

18.6.2 上下文的生命周期561

18.6.3 获得初始命名上下文562

18.6.4 创建一个绑定563

18.6.5 建立一个命名图564

18.6.6 重绑定567

18.6.7 取消绑定569

18.6.8 正确地撤消上下文570

18.6.9 解析名称571

18.7 迭代器573

18.7.1 使用迭代器的必要性573

18.7.2 拉迭代器574

18.7.3 推迭代器575

18.7.4 命名服务迭代器576

18.8 命名服务中容易出错的地方579

18.9 名称库580

18.10 命名服务工具581

18.11 怎样公告对象581

18.13 联邦化命名582

18.12 公告的时机582

18.13.1 完全连接的联邦化结构583

18.13.2 层次化的联邦结构584

18.13.3 混合结构585

18.14 给气温控制系统增加命名586

18.14.1 通用的辅助函数586

18.14.2 更新气温控制系统的服务器程序589

18.14.3 更新气温控制系统的客户程序590

18.15 本章小结591

19.3.1 基本的交易概念592

19.3 交易的概念和术语592

19.1 本章概述592

第19章 OMG交易服务592

19.2 简介592

19.3.2 服务类型和IDL接口类型593

19.3.3 服务请求594

19.3.4 约束表达式594

19.3.5 联邦594

19.3.6 动态属性595

19.3.7 代理提供源595

19.3.8 优先权596

19.3.9 策略596

19.5 服务类型仓库597

19.4 IDL概述597

19.5.1 属性598

19.5.2 服务类型的继承600

19.5.3 服务类型仓库的IDL602

19.5.4 在C++内使用服务类型仓库608

19.6 交易接口610

19.6.1 主要接口612

19.6.2 抽象基接口612

19.7.1 export操作的IDL定义614

19.7 导出服务提供源614

19.6.4 公共类型614

19.6.3 迭代器614

19.7.2 导出服务提供源的C++代码617

19.7.3 附加属性618

19.8 收回服务提供源619

19.9 改变服务提供源620

19.10 交易程序约束语言621

19.10.1 字面值621

19.10.2 标识符622

19.10.3 比较运算符622

19.10.7 子串的匹配623

19.10.8 存在性测试623

19.10.4 算术运算符623

19.10.6 集合成员623

19.10.5 布尔运算符623

19.10.9 优先权624

19.10.10 约束语言的示例程序624

19.11 导入服务提供源625

19.11.1 Lookup接口的IDL625

19.11.2 编制一个简单的查询(Query)程序627

19.11.3 OfferInterator接口629

19.11.4 控制query返回的细节632

19.11.5 使用优先权633

19.11.6 导入策略634

19.12 成批收回637

19.13 Admin接口638

19.13.1 设定配置值638

19.13.2 检索服务提供源ID639

19.14 检测服务提供源639

19.15 导出动态属性640

19.16 交易程序联邦643

19.16.1 链接和联邦的策略643

19.16.2 请求标识符645

19.16.3 指定一个起始的交易646

19.16.4 Link接口646

19.16.5 定位交易程序的Register接口650

19.16.6 联邦和导入策略651

19.17 交易程序工具652

19.18 交易程序的体系结构652

19.19 如何发布公告654

19.20 避免重复服务提供源654

19.21 向气温控制系统添加交易655

19.21.1 为控制器创建服务类型655

19.21.2 为控制器导出服务提供源657

19.21.3 向控制器导入引用658

19.22 本章小结659

第20章 OMG事件服务660

20.1 本章概述660

20.2 简介660

20.3 分布式回调660

20.3.1 回调的示例661

20.3.2 回调出现的问题662

20.3.3 分布式回调的评价664

20.4 事件服务基础665

20.4.1 经典的推模型666

20.4.2 经典的拉模型666

20.4.3 混合推/拉模型666

20.4.4 混合拉/推模型667

20.4.5 混合事件模型667

20.5 事件服务接口668

20.5.1 推模型接口669

20.5.2 拉模型接口670

20.5.3 事件通道接口670

20.5.4 事件通道的联邦673

20.6.1 获得一个EventChannel引用675

20.6 实现使用者和提供者675

20.6.2 实现一个推提供者676

20.6.3 实现一个推使用者677

20.6.4 实现一个拉提供者679

20.6.5 实现一个拉使用者683

20.7 选择一个事件模型684

20.7.1 事件通道的实现685

20.7.2 推模型浅析685

20.8.2 可靠性的缺陷686

20.8.1 多个提供者686

20.8 事件服务的局限性686

20.7.3 拉模型浅析686

20.8.3 筛选性的缺陷687

20.8.4 工厂的缺陷687

20.8.5 异步消息传送687

20.9 本章小结688

第6部分 功能强大的CORBA689

第21章 多线程应用程序689

21.1 本章概述689

21.2 简介689

21.3 多线程编程的动机689

21.3.1 请求的排队689

21.3.2 事件处理690

21.3.3 单线程服务器程序的评价691

21.3.4 多线程编程的优点692

21.4 多线程服务器程序的基础692

21.4.1 ORB底层的多线程问题693

21.4.2 POA多线程问题694

21.4.3 伺服程序的多线程问题695

21.4.4 第三方库问题696

21.4.5 ORB事件处理的多线程问题696

21.5 多线程策略697

21.6 实现多线程服务器程序697

21.6.1 CCS生命周期操作的复习698

21.6.2 总体的应用程序问题699

21.6.3 并发性问题700

21.6.4 Controller_impl伺服类700

21.6.5 创建操作的实现702

21.6.6 Devicelocator_impl伺服程序定位器704

21.6.7 实现preinvoke705

21.6.8 实现温度计的伺服程序707

21.6.9 多线程收回器的评价708

21.7 伺服程序激活器和收回器模式709

21.8 本章小结710

22.3 减少消息开销711

22.2 简介711

第22章 性能、可扩展性和可维护性711

22.1 本章概述711

22.3.1 基本IIOP性能限制712

22.3.2 粗操作713

22.3.3 粗略对象模型716

22.3.4 客户端高速缓冲存取718

22.4.2 为每个对象创造单独的伺服程序719

22.4.3 伺服程序的定位器和激活器719

24.4.4 收回器模式719

22.4.1 线程化服务器程序719

22.4 优化服务程序的实现719

22.4.5 默认伺服程序720

22.4.6 定制对象引用720

22.4.7 服务器端高速缓存720

22.5 联邦服务720

22.6 改进物理设计721

22.7 本章小结723

附录A ICP模拟器的源代码724

附录B CORBA资源733

参考文献735

热门推荐