⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 请问handle句柄是什么东东我在看书和程序是怎么也不明白!.htm

📁 这是操作系统经典并发程序
💻 HTM
📖 第 1 页 / 共 2 页
字号:
        <TR>
          <TD colSpan=4 height=5></TD></TR></TBODY></TABLE>
      <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD width=10 bgColor=#f1f5fa></TD>
          <TD bgColor=#f1f5fa height=25><FONT color=#3366cc>回复人:<B> 
            bobofu(有问题要问) </B></FONT><FONT color=#000000>( ) 信誉:100 </FONT></TD>
          <TD bgColor=#f1f5fa height=25><FONT color=#000000>2001-03-08 
            16:57:00Z </FONT></TD>
          <TD bgColor=#f1f5fa height=25><FONT color=#000000>得分:</FONT><FONT 
            color=#000000>0</FONT> </TD></TR>
        <TR>
          <TD bgColor=#0066cc colSpan=4 height=1></TD></TR>
        <TR>
          <TD colSpan=4 height=5></TD></TR>
        <TR>
          <TD><FONT color=#ffffff>?</FONT></TD>
          <TD colSpan=3><PRE>
句柄类(handle classes )
  C + +中的存取控制允许将实现与接口部分分开,但实现的隐藏是不完全的。编译器必须知
道一个对象的所有部分的声明,以便创建和管理它。我们可以想象一种只需声明一个对象的公
共接口部分的编程语言,而将私有的实现部分隐藏起来。但C + +在编译期间要尽可能多地做静
态类型检查。这意味着尽早捕获错误,也意味着程序具有更高的效率。然而这对私有的实现部
分来说带来两个影响:一是即使程序员不能轻易地访问实现部分,但他可以看到它;二是造成
一些不必要的重复编译。
1 可见的实现部分
  有些项目不可让最终用户看到其实现部分。例如可能在一个库的头文件中显示一些策略信息,但公司不想让这些信息被竞争对手获得。比如从事一个安全性很重要的系统(如加密算
法),我们不想在文件中暴露任何线索,以防有人破译我们的代码。或许我们把库放在了一个
“有敌意”的环境中,在那里程序员会不顾一切地用指针和类型转换存取我们的私有成员。在
所有这些情况下,就有必要把一个编译好的实际结构放在实现文件中,而不是让其暴露在头
文件中。
2 减少重复编译
  在我们的编程环境中,当一个文件被修改,或它所依赖的文件包含的头文件被修改时,项
目负责人需要重复编译这些文件。这意味着无论何时程序员修改了一个类,无论是修改公共的
接口部分,还是私有的实现部分,他都得再次编译包含头文件的所有文件。对于一个大的项目
而言,在开发初期这可能非常难以处理,因为实现部分可能需要经常改动;如果这个项目非常
大,用于编译的时间过多就可能妨碍项目的完成。
  解决这个问题的技术有时叫句柄类(handle classes )。有关实现的
任何东西都消失了,只剩一个单一的指针“s m i l e ”。该指针指向
一个结构,该结构的定义与其所有的成员函数的定义一样出现在实现文
件中。这样,只要接口部分不改变,头文件就不需变动。而实现部分可
以按需要任意更动,完成后只要对实现文件进行重新编译,然后再连接
到项目中。
  这里有个说明这一技术的简单例子。头文件中只包含公共的接口和一个简单的没有完全指
定的类指针。
//HANDLE.H--Handle classes
#ifndef HANDEL_H_
#define HANDEL_H_

class handle{
  struct cheshire;//Class declaration only
  cheshire* smile;
public:
  void initialize();
  void cleanup();
  int read();
  void chang(int);
};
#endif  // HANDEL_H_
  这是所有客户程序员都能看到的。这行
    struct cheshire;
  是一个没有完全指定的类型说明或类声明(一个类的定义包含类的主体)。它告诉编译器,
cheshire 是一个结构的名字,但没有提供有关该结构的任何东西。这对产生一个指向结构的指
针来说已经足够了。但我们在提供一个结构的主体部分之前不能创建一个对象。在这种技术里,
包含具体实现的结构主体被隐藏在实现文件中。


这是Thinking in C++中的描述。我认为很清楚。具体参阅该书第三章。

</PRE></TD></TR>
        <TR>
          <TD align=right colSpan=4 height=10><FONT color=#ff6633><B><A 
            href="http://book.hackbase.com/ask11/ask169474.htm#top"><FONT 
            color=#3366cc>Top</FONT></A></B></FONT></TD></TR>
        <TR>
          <TD colSpan=4 height=5></TD></TR></TBODY></TABLE>
      <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD width=10 bgColor=#f1f5fa></TD>
          <TD bgColor=#f1f5fa height=25><FONT color=#3366cc>回复人:<B> 
            gisfan(葫芦弟兄) </B></FONT><FONT color=#000000>( ) 信誉:100 </FONT></TD>
          <TD bgColor=#f1f5fa height=25><FONT color=#000000>2001-03-08 
            21:20:00Z </FONT></TD>
          <TD bgColor=#f1f5fa height=25><FONT color=#000000>得分:</FONT><FONT 
            color=#000000>0</FONT> </TD></TR>
        <TR>
          <TD bgColor=#0066cc colSpan=4 height=1></TD></TR>
        <TR>
          <TD colSpan=4 height=5></TD></TR>
        <TR>
          <TD><FONT color=#ffffff>?</FONT></TD>
          <TD colSpan=3><PRE>
看charles Petzold的《WINDOWS PROGRAMMING》,北大出版社
</PRE></TD></TR>
        <TR>
          <TD align=right colSpan=4 height=10><FONT color=#ff6633><B><A 
            href="http://book.hackbase.com/ask11/ask169474.htm#top"><FONT 
            color=#3366cc>Top</FONT></A></B></FONT></TD></TR>
        <TR>
          <TD colSpan=4 height=5></TD></TR></TBODY></TABLE>
      <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD width=10 bgColor=#f1f5fa></TD>
          <TD bgColor=#f1f5fa height=25><FONT color=#3366cc>回复人:<B> 
            CandyCat(苯苯猫) </B></FONT><FONT color=#000000>( ) 信誉:100 </FONT></TD>
          <TD bgColor=#f1f5fa height=25><FONT color=#000000>2001-03-09 
            00:18:00Z </FONT></TD>
          <TD bgColor=#f1f5fa height=25><FONT color=#000000>得分:</FONT><FONT 
            color=#000000>0</FONT> </TD></TR>
        <TR>
          <TD bgColor=#0066cc colSpan=4 height=1></TD></TR>
        <TR>
          <TD colSpan=4 height=5></TD></TR>
        <TR>
          <TD><FONT color=#ffffff>?</FONT></TD>
          <TD colSpan=3><PRE>
To bobofu(有问题要问) 
请问你有Thinking in C++的中文电子版吗?在哪里能下载呢?谢谢你!
</PRE></TD></TR>
        <TR>
          <TD align=right colSpan=4 height=10><FONT color=#ff6633><B><A 
            href="http://book.hackbase.com/ask11/ask169474.htm#top"><FONT 
            color=#3366cc>Top</FONT></A></B></FONT></TD></TR>
        <TR>
          <TD colSpan=4 height=5></TD></TR></TBODY></TABLE>
      <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD width=10 bgColor=#f1f5fa></TD>
          <TD bgColor=#f1f5fa height=25><FONT color=#3366cc>回复人:<B> 
            classfactory(贾迎乐) </B></FONT><FONT color=#000000>( ) 信誉:100 
          </FONT></TD>
          <TD bgColor=#f1f5fa height=25><FONT color=#000000>2001-03-09 
            12:49:00Z </FONT></TD>
          <TD bgColor=#f1f5fa height=25><FONT color=#000000>得分:</FONT><FONT 
            color=#000000>0</FONT> </TD></TR>
        <TR>
          <TD bgColor=#0066cc colSpan=4 height=1></TD></TR>
        <TR>
          <TD colSpan=4 height=5></TD></TR>
        <TR>
          <TD><FONT color=#ffffff>?</FONT></TD>
          <TD colSpan=3><PRE>

    To CandyCat(Candy):
    你说的那些是属于“内核对象”,但是象窗口、菜单这些东西是属于“用户对象”的,他们的管理和访问控制是完全不同的。

    HANDLE具体是什么东西,取决与对象的存储方式。学过数据结构的人都应该清楚,多个同类对象的存储方式最常用的有两种:数组和链表。这两种方式各有优缺点,具体我就不再说了。根据《核心编程》这本书的说法(我没试过),内核对象似乎是采用数组方式,因此HANDLE就是数组索引。而对于用户对象,根据我的分析和一些书上写的,应该采用的是链表方式(因其动态性能较好)。所以在这里,HANDLE就是对应结构的指针了。

    关于数组和链表,都是老土的东西了,如果你还是不懂的话我可没办法了。 :)


</PRE></TD></TR>
        <TR>
          <TD align=right colSpan=4 height=10><FONT color=#ff6633><B><A 
            href="http://book.hackbase.com/ask11/ask169474.htm#top"><FONT 
            color=#3366cc>Top</FONT></A></B></FONT></TD></TR>
        <TR>
          <TD colSpan=4 height=5></TD></TR></TBODY></TABLE>
      <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD width=10 bgColor=#f1f5fa></TD>
          <TD bgColor=#f1f5fa height=25><FONT color=#3366cc>回复人:<B> 
            hcphcp(小四:君子一言) </B></FONT><FONT color=#000000>( ) 信誉:100 </FONT></TD>
          <TD bgColor=#f1f5fa height=25><FONT color=#000000>2001-03-09 
            13:52:00Z </FONT></TD>
          <TD bgColor=#f1f5fa height=25><FONT color=#000000>得分:</FONT><FONT 
            color=#000000>0</FONT> </TD></TR>
        <TR>
          <TD bgColor=#0066cc colSpan=4 height=1></TD></TR>
        <TR>
          <TD colSpan=4 height=5></TD></TR>
        <TR>
          <TD><FONT color=#ffffff>?</FONT></TD>
          <TD colSpan=3><PRE>
我KAO
你们怎么懂这么多:)
</PRE></TD></TR>
        <TR>
          <TD align=right colSpan=4 height=10><FONT color=#ff6633><B><A 
            href="http://book.hackbase.com/ask11/ask169474.htm#top"><FONT 
            color=#3366cc>Top</FONT></A></B></FONT></TD></TR>
        <TR>
          <TD colSpan=4 height=5></TD></TR></TBODY></TABLE>
      <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD width=10 bgColor=#f1f5fa></TD>
          <TD bgColor=#f1f5fa height=25><FONT color=#3366cc>回复人:<B> 
            bobofu(有问题要问) </B></FONT><FONT color=#000000>( ) 信誉:100 </FONT></TD>
          <TD bgColor=#f1f5fa height=25><FONT color=#000000>2001-03-10 
            16:00:00Z </FONT></TD>
          <TD bgColor=#f1f5fa height=25><FONT color=#000000>得分:</FONT><FONT 
            color=#000000>0</FONT> </TD></TR>
        <TR>
          <TD bgColor=#0066cc colSpan=4 height=1></TD></TR>
        <TR>
          <TD colSpan=4 height=5></TD></TR>
        <TR>
          <TD><FONT color=#ffffff>?</FONT></TD>
          <TD colSpan=3><PRE>
to CandyCat(Candy) --http://louisxiv.home.chinaren.com/
不过建议买本书看,电子版看起来太累。
</PRE></TD></TR>
        <TR>
          <TD align=right colSpan=4 height=10><FONT color=#ff6633><B><A 
            href="http://book.hackbase.com/ask11/ask169474.htm#top"><FONT 
            color=#3366cc>Top</FONT></A></B></FONT></TD></TR>
        <TR>
          <TD colSpan=4 height=5></TD></TR></TBODY></TABLE></TD></TR>
  <TR>
    <TD>
      <TABLE cellSpacing=0 cellPadding=0 width=580 border=0>
        <TBODY>
        <TR>
          <TD width="100%" bgColor=#999999 height=1></TD></TR>
        <TR>
          <TD width="100%"><BR>结贴 </TD></TR>
        <TR>
          <TD width="100%" 
height=10></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></CENTER>
<SCRIPT language=javascript src=""></html></SCRIPT>
</BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -