若是你向我问起 Win32 程序设计中印象最深(最坑爹)的一个概念是什么,那么我会毫不犹豫地告诉你——句柄(Handles)。究其原因,无论是 MSDN 还是 维基百科,对于“句柄”这个词的解说都显得过于专业,完全是一副气势汹汹、不把初学者吓尿就不罢休的架势。

而这个概念恰恰是入门 Win32 程序设计所要逾越的第一座高山:文件的句柄(HANDLE)、窗口的句柄(HWND)、位图的句柄(HBITMAP)、设备上下文的句柄(HDC)、菜单的句柄(HMENU)、实例的句柄(HINSTANCE)……真可谓如影随形,无处不在。

设计哲学

我必须承认,用“哲学”这个字眼来当作标题是有些大了。其实用大白话来说,就是为什么要设计“句柄”这个东西,以及设计这东西到底有什么好处。

那么让我们把思绪带回到遥远的古代,先。

假设你带领一队拓荒者,你们的目标是在内陆的一个平原上建立你们的村子。现在的情况是,这个地方虽然物产丰饶,但周围并没有类似河流、湖泊这样直接可用的饮用淡水资源,那么你会怎么办?

——当然是打口井了。

好办法!但接下来的问题又来了:

这是一口 10 米深的井,你将如何解决饮水的问题?毕竟,下到井底直接喝水不仅费时费力,而且存在着一定的危险性。

这个问题的确稍显脑残,因为我们的祖先早已发明了一件神奇的辅助工具来解决这个问题。这件工具也就是为我们所熟知的辘轳,如下图。

这张图出自明人宋应星所著的《天工开物》一书,其中示意了辘轳的结构及其使用方法。好了,现在让我们从程序员的视角来做一些有趣的分析,也就是刚才提到过的所谓“设计哲学”——当然,是关于辘轳的。

  • 在整个打水的过程中,打水者并不需要关心整个水井的实现,也不需要关注辘轳运作的内部机制。在这个“黑箱”形成后,他唯一要做的只是转动手柄,仅此而已。
  • 由于借助了辘轳,取水者不必直接面对水井的底层——也就是深不可测的井水,这样大大降低了打水的危险系数。

定义

我相信,这么说应该能够让你理解辘轳上的那个手柄的意义了。鉴于英语中的手柄和句柄是同一个单词“handle”,那么我觉得“句柄”一词的定义也可以给出来了:

所谓句柄,就是指在某些情况下我们出于易用性和安全性的考虑,为了隐藏真正数据对象的实现而对其进行某种方式的绑定或映射后最终得到并使用的描述符。

handle句柄的更多相关文章

  1. code of C/C++(3) - 从 《Accelerated C++》源码学习句柄类

    0  C++中多态的概念 多态是指通过基类的指针或者引用,利用虚函数机制,在运行时确定对象的类型,并且确定程序的编程策略,这是OOP思想的核心之一.多态使得一个对象具有多个对象的属性.class Co ...

  2. VC一些经验系列: 《分享泄漏检测工具:内存、DC、GDI、Handle... 》

    分享下自己工作中用到的一些用于泄漏检测的工具 后面的是DC的一些定义和注意事项.(不喜勿看) //=================================================== ...

  3. delphi 句柄

    句柄Handle顾名思义就是把柄,把手的意思 ,得到了某对象的句柄可以任意控制此对象 .句柄是一种指向指针的指针.不是每个组件都有句柄,只有窗口控件等(*.模块(module)*.任务(task)*. ...

  4. c++沉思录 学习笔记 第六章 句柄(引用计数指针雏形?)

    一个简单的point坐标类 class Point {public: Point():xval(0),yval(0){} Point(int x,int y):xval(x),yval(y){} in ...

  5. 用Windows Native API枚举所有句柄及查找文件句柄对应文件名的方法

    枚举所有句柄的方法 由于windows并没有给出枚举所有句柄所用到的API,和进程所拥有的句柄相关的只有GetProcessHandleCount这个函数,然而这个函数只能获取到和进程相关的句柄数,不 ...

  6. 【旧文章搬运】Windows句柄表分配算法分析(一)

    原文发表于百度空间,2009-03-30========================================================================== 阅读提示: ...

  7. Windows中句柄和ID的区别

    写在前面:这里介绍句柄 对于“句柄”,在下一直停留在一知半解的认识层面,近日在下学习Windows编程,决定趁此机会将句柄彻底搞清楚.查阅了一些网络上的资料,发现网络上的讲解大概可以分为两类:一种是以 ...

  8. 获取句柄的类型以及对应的ID序号

    遍历所有进程下的所有句柄,以及对应句柄类型. 一丶简介 在有的时候.我们会需要对应句柄名字.以及句柄类型的名称. 以及它所对应的的ID. 因为每个系统不一样.所以每次都是不一样的. 有的时候我们就需要 ...

  9. DuplicateHandle 伪句柄 与 实句柄的应用

    如果把GetCurrentThread()返回值传递给一个HANDLE句柄,用它进行ResumeThread,结果肯定不是我们想要的.下面的例子详细描述了伪句柄的调用结果: #include &quo ...

随机推荐

  1. 用Random产生1到10之间的一个随机数

    bat中怎样用Random产生1到10之间的一个随机数? 当然是用%random%,示例: @echo off rem 用Random产生1到10之间的一个随机数 set num=%random% s ...

  2. pandas 之 交叉表-透视表

    import numpy as np import pandas as pd 认识 A pivot table is a data summarization tool(数据汇总工具) frequen ...

  3. 8、RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较

    RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较 RabbitMQ中,除了Simple Queue和Work Queue之外的所有生产者提交的消息都由Exc ...

  4. jquery 监听不起效果的小问题汇总

    在写前端页面时,因为我是用jquery添加新的html字符串来实现动态添加.删除,每次新添加都需要生成新的id,当我对新的id进行监听时,却不起作用. 思考了很多方法,开始我以为,如果将监听的语句$( ...

  5. ZooKeeper架构原理你学会了吗?

    Zookeeper是分布式一致性问题的工业解决方案,是Apache Hadoop下解决分布式一致性的一个组件,后被分离出来成为Apache的顶级项目. 工程来源:是雅虎公司内部项目,据说雅虎内部很多项 ...

  6. JS高阶---继承模式(借用构造函数继承+组合继承)

    (1)借用构造函数继承 案例如下: 验证: (2)组合继承 案例如下: 验证如下: 结果如右图所示 . .

  7. HTTP 2.0 之压测工具 Jmeter

    年后,德国总部工业平台要做中国本地化,德国的同事过来给我们展示日志的时候,无意间看到了他们应用日志里的 HTTP/2,下意识到,原来他们都已经提供Http 2.0的服务了. 那么问题来了,除了h2lo ...

  8. 201871010132-张潇潇-《面向对象程序设计(java)》第六-七周学习总结

    201871010132-张潇潇-<面向对象程序设计(java)>第六-七周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh ...

  9. 201871010111-刘佳华《面向对象程序设计(java)》第四周学习总结

    201871010111-刘佳华<面向对象程序设计(java)>第四周学习总结 实验时间 2019-9-20 第一部分:总结第四章理论知识 4.1:类与对象的概念. 类:类是构造对象的模板 ...

  10. java web问题总结

    1.java web上传附图页面空,无返回 原因:前端页面与后台端口不一致,无页面可返回 2.上传excel导入数据时,只能导入第一条,后面的数据无法导入,缓存设置过小.