主页 详情

《Win32多线程程序设计》_(美)Jim Beveridge & Robert Wiener著;侯捷译_10879856_756092638X

【书名】:《Win32多线程程序设计》
【作者】:(美)Jim Beveridge & Robert Wiener著;侯捷译
【出版社】:武汉:华中科技大学出版社
【时间】:2002
【页数】:453
【ISBN】:756092638X
【SS码】:10879856

最新查询

内容简介

第一篇 上路吧,线程

第1章 为什么要“千头万绪”

一条曲折的路

FAQ 01:合作型(cooperative)多任务与抢先式(preemptive)多任务有何不同?

Frequently Asked Questions

常见问答集

FAQ 02:我可以在Win32s中使用多个线程吗?

函数索引(Function Index)…………………………………封面里常见问答集(Frequently Asked Questions)

与线程共枕

目录

为什么最终用户也需要多线程多任务

FAQ 03:线程和进程有何不同?

Win32基础

FAQ 04:线程在操作系统中携带多少“行李”?

Context Switching

FAQ 05:Context Switch是怎么发生的?

Race Conditions(竞争条件)

Atomic Operations(原子操作)

线程之间如何通讯

好消息与坏消息

第2章 线程的第一次接触

产生一个线程

使用多个线程的结果

核心对象(Kernel Objects)

FAQ 06:为什么我应该调用CloseHandle()?

FAQ 07:为什么可以在不结束线程的情况下关闭其handle?

线程结束代码(Exit Code)

结束一个线程

FAQ 08:如果线程还在运行而我的程序结束了,会怎样?

FAQ 09:什么是MTVERIFY?

错误处理

后台打印(Background Printing)

成功的秘诀

第3章 快跑与等待

看似闲暇却忙碌(Busy Waiting)

性能监视器(Performance Monitor)

等待一个线程的结束

叮咚:被激发的对象(Signaled Objects)

FAQ 10:我如何得知一个核心对象是否处于激发状态?

FAQ 11:什么是一个被激发的对象?

FAQ 12:“激发”对于不同的核心对象有什么不同的意义?

等待多个对象

FAQ 13:我如何在主线程中等待一个handle?

在一个GUI程序中等待

提要

第4章 同步控制(Synchronization)

Critical Sections(关键区域、临界区域)

FAQ 14:如果线程在critical sections中停很久,会怎样?

FAQ 15:如果线程在critical sections中结束,会怎样?

死锁(Deadlock)

FAQ 16:我如何避免死锁?

哲学家进餐问题(The Dining Philosophers)

FAQ 17:我能够等待一个以上的critical sections吗?

互斥器(Mutexes)

信号量(Semaphores)

FAQ 18:谁才拥有semaphore?

事件(Event Objects)

FAQ 19:Event object有什么用途?

FAQ 20:如果我对着一个event对象调用PulseEvent()并且没有线程正在等待,会怎样?

从Worker线程中显示输出

Interlocked Variables

同步机制摘要

第5章 不要让线程成为脱缰野马

干净地终止一个线程

线程优先权(Thread Priority)

初始化一个线程

提要

第6章 Overlapped I/O,在你身后变戏法

FAQ 21:什么是overlapped I/O?

FAQ 22:Overlapped I/O在Windows 95上有什么限制?

Win32文件操作函数

FAQ 23:我能够以C runtime library使用overlapped I/O吗?

被激发的File Handles

FAQ 24:Overlapped I/O总是异步地(asynchronously)执行吗?

FAQ 25:我应该如何为overlapped I/O产生一个event对象?

被激发的Event对象

FAQ 26:ReadFileEx()和WriteFileEx()的优点是什么?

FAQ 27:一个I/O completion routine何时被调用?

异步过程调用(Asynchronous Procedure Calls,APCs)

FAQ 28:我如何把一个用户自定义数据传递给I/O completion routine?

FAQ 29:我如何把C++成员函数当做一个I/O completion routine?

对文件进行Overlapped I/O的缺点

I/O Completion Ports

FAQ 30:在一个高效率服务器(server)上我应该怎么进行I/O?

FAQ 31:为什么一个I/O completion ports是如此特殊?

FAQ 32:一个I/O completion port上应该安排多少个线程等待?

对Sockets使用Overlapped I/O

FAQ 33:为什么我不应该使用select()?

提要

第7章 数据一致性(Data Consistency)

第二篇 多线程程序设计的工具与手法

认识volatile关键字

FAQ 34:volatile如何影响编译器的最优化操作?

Referential Integrity

The Readers/Writers Lock

FAQ 35:什么是Readers/Writers lock?

我需要锁定吗?

FAQ 36:一次应该锁住多少数据?

Lock Granularity(锁定粒度)

提要

第8章 使用C Run-time Library

FAQ 37:我应该使用多线程版本的C run-time library吗?

什么是C Runtime Library多线程版本

FAQ 38:我如何选择一套适当的C run-time library?

选择一个多线程版本的C Runtime Library

以C Runtime Library启动线程

FAQ 39:我如何使用_beginthreadex()和_endthreadex()?

FAQ 40:什么时候我应该使用_beginthreadex()而非CreateThread()?

哪一个好:CreateThread()抑或_beginthreadex()?

避免stdio.h

FAQ 41:我如何使用Console API取代stdio.h?

一个安全的多线程程序

FAQ 42:为什么我不应该使用_beginthread()?

结束进程(Process)

为什么你应该避免beginthread()

提要

第9章 使用C++

处理有问题的_beginthreadex()数原型

以一个C++对象启动一个线程

FAQ 43:我如何以一个C++成员函数当做线程起始函数?

FAQ 44:我如何以一个成员函数当做线程起始函数?

建立比较安全的Critical Sections

建立比较安全的Locks

建立可互换(Interchangeable)的locks

异常情况(Exceptions)的处理

提要

第10章 MFC中的线程

在MFC中启动一个Worker线程

FAQ 45:我如何能够阻止一个线程杀掉它自己?

安全地使用AfxBeginThread()的传回值

在MFC中启动一个UI线程

FAQ 46:CWinApp和主线程之间有什么关系?

与MFC对象共处

FAQ 47:我如何设定AfxBeginThread()中的pThreadClass参数?

MFC的同步控制

MFC对于MsgWaitForMultipleObjects()的支持

提要

第11章 GDI与窗口管理

线程的消息队列

消息如何周游列国

GUI效率问题

以Worker线程完成多线程版MDI程序

多个上层窗口(Top Level Windows)如何是好?

线程之间的通讯

NT的影子线程(shadow thread)

关于“Cancel”对话框

锁住GDI对象

提要

第12章 调试

有计划地对付错误

使用WindowsNT

Bench Testing

FAQ 48:我如何对一个特定的线程调试?

线程对话框

运转记录(Logging)

内存记号(Memory Trails)

硬件调试寄存器(Hardware Debug Registers)

科学方法

提要

第13章 进程之间的通讯(Interprocess Communication)

以消息队列权充数据转运中心

使用共享内存(Shared Memory)

使用指针指向共享内存(Shared Memory)

较高层次的进程通讯(IPC)

提要

第14章 建造DLLs

DLL的通告消息(Notifications)

FAQ 49:如果一个新的线程使用了我的DLL,我如何被告知?

通告消息(Notifications)的问题

FAQ 50:为什么我在写DLL时需要小心所谓的动态链接?

DLL进入点的依序执行(Serialization)特性

FAQ 51:为什么我在DllMain中启动一个线程时必须特别小心?

MFC中的DLL通告消息(Notifications)

喂食给Worker线程

线程局部存储(Thread Local Storage,TLS)

FAQ 52:我如何在DLL中设定一个thread local storage(TLS)?

declspec(thread)

数据的一致性

FAQ 53:_declspec(thread)的限制是什么?

提要

第三篇 真实世界中的多线程应用程序

第15章 规划一个应用程序

多线程的理由

FAQ 54:我应该在什么时候使用多线程?

要线程还是要进程?

多线程程序的架构

FAQ 55:我能够对既有程序代码进行多线程操作吗?

评估既有程序代码的适用性

FAQ 56:我可以在我的数据库应用程序中使用多线程吗?

对ODBC做规划

第三方的函数库(Third-PartyLibraries)

提要

第16章 ISAPI

Web服务器及其工作原理

ISAPI

IS2ODBC范例程序

提要

第17章 OLE,ActiveX,COM

COM的线程模型(COM Threading Models)

AUTOINCR范例程序

提要

附录A MTVERIFY宏

附录B 更多的信息


书查询(www.shuchaxun.com)本网页唯一编码:
0a66ce04f52b5807b37cef5e63ba0a4f#e8ba362e6ed9fde9a70989c3f86e4a13#45269430#10879856.uvz