首页
社区
课程
招聘
[分享]弱弱的放在这里:C/C++ for Win32编程,题目待定
发表于: 2009-1-19 21:34 12618

[分享]弱弱的放在这里:C/C++ for Win32编程,题目待定

2009-1-19 21:34
12618
收藏
免费 0
支持
分享
最新回复 (26)
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
26
我来顶原创的
2009-2-16 10:31
0
雪    币: 218
活跃值: (129)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
>>接上贴
4.使用对象销毁通告设置并检查状态
    在第一例中,可以定义一个全局类对象来管理*lpDEntry们。但这种方法的前提是对象数量必须比较少且最好能确定。
    但对于动态数量的对象,则存在下面的分析:
  -设成全局对象,必须有足够的容量容纳所有的*lpDEntry。予先分配静态数量的空间不合适(要么不足要么浪费),二分配动态数量的空间又存在遍历查询的效率问题。
  -我们不大可能在堆中放跟踪标志,因为标志所占的内存本身也可能分配失败。
  -难道用类来管理lpDEntry吗?仔细分析发现类根本无能为力。况且如果要类化lpDEntry,类本身也得放到堆中。不要忘了,你可以精巧设计使对象状态检查完美——除非对象已经被删除了...
    在第二例中,在调用了SendMessage后调用IsWindow行吗?其实根本行不通!IsWindow比较慢,而且其他线程也可能创建或删除窗口,某个刚创建的窗口可能就使用了已经删除的窗口一样的句柄值。如果可能,SendMessage的接受者可以造一个一样的窗口来,后面的代码就会使用该窗口...

    对象销毁通告可以是一个含标志的数据类型,必须存在于栈中。
    每一次调用含有用户回调调用行为的函数前,设置对象销毁通告中的标志为“正常”,待函数返回后检查该标志。如果标志被改成了“已删除”,则所有的对被保护对象的操作都应当被跳过。被保护对象也得保留一个对对象销毁通告结构的指针。该指针默认为空。在一个对象销毁通告对象创建时被设置成指向该对象。但如果有嵌套调用而要同时引用多个对象销毁通告对象怎么办呢?幸而栈是后进先出的,就避免了出现乱序的可能。这样我们就可以用链表处理该问题。当然,链表只存在于栈中。注意当销毁通告对象销毁时,要将自己的标志拷贝到前一个对象里面。紧接着,如果标志仍为“正常”就读取前一个对象的指针值,并拷贝到被保护对象的相应保留指针位置。
结果如图:

[以后再添加,我要离线了...]
上传的附件:
2009-2-18 00:45
0
游客
登录 | 注册 方可回帖
返回
//