+ -
当前位置:首页 → 问答吧 → 关于私有堆的私有问题?

关于私有堆的私有问题?

时间:2011-04-08

来源:互联网

在多线程编程中,使用函数HeapCreate分配的私有堆,只能创建私有堆的函数能使用,别的线程不可使用,而只能使用自己创建的私有堆吗?本人在编一个多线程程序时,在一个线程中创建私有堆并在其中创建了数据。在本地钩子回调函数中不能使用其中的数据,是因为私有堆的私有造成的吗(个人认为:本地回调函数是系统调用的,不是主线程,是另一个线程)?

作者: hsh188d88452d2   发布时间: 2011-04-08

HeapCreate得到的当前进程的所有线程都可使用,如果加了非序列化标志则要处理同步问题
钩子回调函数大部分都由触发钩子的线程执行,有少数比如WH_JOURNALRECORD的回调函数由安装钩子的线程执行

作者: Lactoferrin   发布时间: 2011-04-08

我做这个程序的思路是这样的,做一个DLL,我对组件的规范不太清楚,而且太复杂,我用自己的方法,实现类似类的模块儿。1)用导出一系列函数代表方法,其中有一个内存分配函数用来创建类的实例对象。2)用数据段数据或通过内存分配函数分配的内存区域代表方法将处理的数据。

我想做个五子棋程序,对这一段学习编程做个总结,我做这个DLL是一个棋盘类,它是一个子窗口类,我用invoke SetWindowLong,ChuangKouJvBing,GWL_USERDATA,OFFSET NeiChunZhiZhen给窗口类附加用户自定义数据生成自己的类,有点像派生类。使用NeiChunZhiZhen时就要用到了内存分配函数,棋盘现在己成形,可现在就差输入判断了,就是在棋盘网格上点击时判断是否击中(在一定范围内),我用一个工作线程计算落子区域的判断,用鼠标钩子采集鼠标数据,以消息方式发送给工作线程,由工作线程作出判断,置位标志位。可现在钩子对传入的窗口自定义数据不认,这是为什么(分配的内存权限的问题?)?钩子却安装成功了,回调函数不运行?代码太乱太多(初学,因为全是自学,碰的问题很怪,见笑了),看的费劲,可能你也得得会儿看,我简单的说明情况,能分析出原因吗?谢了,这问题己折磨我半个月了,求解脱!!

作者: hsh188d88452d2   发布时间: 2011-04-08

这个无需使用鼠标钩子,处理窗口的WM_LBUTTONDOWN消息即可

作者: Lactoferrin   发布时间: 2011-04-08

另外,我调试工具也不太会用,用的VC6的调试工具(凑合用,因为简单直观),你们编程人员一般用什么调试工具?怎么用?能教下吗?

作者: hsh188d88452d2   发布时间: 2011-04-08

windbg

作者: Lactoferrin   发布时间: 2011-04-08

我知道,开始我也想那样做,可是我又想把程序做成模块化的重用的,用一个输入网格函数含概所有的输入过程,并且当创建多个不同棋盘对象且网格数目不同时,我的输入判断函数不失效,对每种网格都管用。另外,我想网格区域的计算较复杂,所以用了一个工作线程计算网格判断,但这样它脱离了窗口主线程,得不到鼠标数据了,于是我想到了钩子,复制一个鼠标消息传给工作线程。

作者: hsh188d88452d2   发布时间: 2011-04-09