图书介绍

Win32多线程程序设计【2025|PDF|Epub|mobi|kindle电子书版本百度云盘下载】

Win32多线程程序设计
  • (美)Jim Beveridge & Robert Wiener著;侯捷译 著
  • 出版社: 武汉:华中科技大学出版社
  • ISBN:756092638X
  • 出版时间:2002
  • 标注页数:453页
  • 文件大小:30MB
  • 文件页数:474页
  • 主题词:暂缺

PDF下载


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

下载说明

Win32多线程程序设计PDF格式电子书版下载

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

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

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

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

图书目录

第一篇 上路吧,线程3

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

一条曲折的路4

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

Frequently Asked Questions5

常见问答集5

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

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

与线程共枕7

目录7

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

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

Win32基础10

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

Context Switching14

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

Race Conditions(竞争条件)16

Atomic Operations(原子操作)19

线程之间如何通讯22

好消息与坏消息22

第2章 线程的第一次接触25

产生一个线程26

使用多个线程的结果31

核心对象(Kernel Objects)36

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

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

线程结束代码(Exit Code)40

结束一个线程45

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

FAQ 09:什么是MTVERIFY?48

错误处理48

后台打印(Background Printing)50

成功的秘诀59

第3章 快跑与等待61

看似闲暇却忙碌(Busy Waiting)62

性能监视器(Performance Monitor)66

等待一个线程的结束72

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

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

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

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

等待多个对象77

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

在一个GUI程序中等待85

提要91

第4章 同步控制(Synchronization)93

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

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

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

死锁(Deadlock)102

FAQ 16:我如何避免死锁?103

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

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

互斥器(Mutexes)107

信号量(Semaphores)115

FAQ 18:谁才拥有semaphore?118

事件(Event Objects)120

FAQ 19:Event object有什么用途?120

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

从Worker线程中显示输出124

Interlocked Variables125

同步机制摘要128

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

干净地终止一个线程132

线程优先权(Thread Priority)138

初始化一个线程144

提要146

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

FAQ 21:什么是overlapped I/O?150

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

Win32文件操作函数151

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

被激发的File Handles155

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

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

被激发的Event对象159

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

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

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

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

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

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

I/O Completion Ports172

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

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

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

对Sockets使用Overlapped I/O182

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

提要190

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

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

认识volatile关键字196

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

Referential Integrity200

The Readers/Writers Lock205

FAQ 35:什么是Readers/Writers lock?206

我需要锁定吗?214

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

Lock Granularity(锁定粒度)215

提要216

第8章 使用C Run-time Library219

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

什么是C Runtime Library多线程版本220

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

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

以C Runtime Library启动线程224

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

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

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

避免stdio.h237

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

一个安全的多线程程序240

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

结束进程(Process)248

为什么你应该避免beginthread()248

提要251

第9章 使用C++253

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

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

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

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

建立比较安全的Critical Sections265

建立比较安全的Locks268

建立可互换(Interchangeable)的locks270

异常情况(Exceptions)的处理274

提要274

第10章 MFC中的线程277

在MFC中启动一个Worker线程278

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

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

在MFC中启动一个UI线程288

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

与MFC对象共处293

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

MFC的同步控制296

MFC对于MsgWaitForMultipleObjects()的支持300

提要301

第11章 GDI与窗口管理303

线程的消息队列304

消息如何周游列国306

GUI效率问题311

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

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

线程之间的通讯314

NT的影子线程(shadow thread)316

关于“Cancel”对话框316

锁住GDI对象319

提要319

第12章 调试321

有计划地对付错误322

使用WindowsNT322

Bench Testing323

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

线程对话框324

运转记录(Logging)325

内存记号(Memory Trails)327

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

科学方法330

提要333

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

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

使用共享内存(Shared Memory)345

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

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

提要364

第14章 建造DLLs367

DLL的通告消息(Notifications)369

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

通告消息(Notifications)的问题375

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

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

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

MFC中的DLL通告消息(Notifications)379

喂食给Worker线程380

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

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

declspec(thread)390

数据的一致性392

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

提要393

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

第15章 规划一个应用程序397

多线程的理由398

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

要线程还是要进程?403

多线程程序的架构404

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

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

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

对ODBC做规划411

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

提要413

第16章 ISAPI415

Web服务器及其工作原理416

ISAPI417

IS2ODBC范例程序420

提要427

第17章 OLE,ActiveX,COM429

COM的线程模型(COM Threading Models)431

AUTOINCR范例程序437

提要443

附录A MTVERIFY宏445

附录B 更多的信息451

热门推荐