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

- (美)Jim Beveridge & Robert Wiener著;侯捷译 著
- 出版社: 武汉:华中科技大学出版社
- ISBN:756092638X
- 出版时间:2002
- 标注页数:453页
- 文件大小:30MB
- 文件页数:474页
- 主题词:暂缺
PDF下载
下载说明
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
热门推荐
- 457315.html
- 2362752.html
- 2741945.html
- 3770294.html
- 3007800.html
- 380674.html
- 3806044.html
- 2218279.html
- 593943.html
- 3523540.html
- http://www.ickdjs.cc/book_1701999.html
- http://www.ickdjs.cc/book_1195893.html
- http://www.ickdjs.cc/book_459786.html
- http://www.ickdjs.cc/book_2064995.html
- http://www.ickdjs.cc/book_2503701.html
- http://www.ickdjs.cc/book_2248607.html
- http://www.ickdjs.cc/book_1669615.html
- http://www.ickdjs.cc/book_689189.html
- http://www.ickdjs.cc/book_575309.html
- http://www.ickdjs.cc/book_2032176.html