dychenyi/
共539个网摘 [
1 2 3 4 5 6 7 8 9 10 11 ...
18 ]
上一页 |
下一页 |
访问dychenyi的个人空间
dychenyi收录,时间:2008-4-10 14:07:24 | 相关网摘,我也收藏
MFC会按线程维护一个handle map,保存下列几种句柄(及相关的C++对象):HWND、HDC、HMENU、HPEN、HBRUSH、HFONT、HBITMAP、HPALATTE、HRGN、HIMAGELIST以及SOCKET(其实,CSocket不“安全”的主要原因不在SOCKET本身,而是因为CSocket使用了HWND)。注意,这些句柄在真正的Windows眼中均是线程无关的,其中很多不但能跨线程使用,甚至可以跨进程使用。但是MFC为了包装,必须提供C++类来对他们封装,为了对这些C++类管理,MFC引进了handle map的概念(这与PCB中的Kernel Handle Table完全是两码事)。但是handle map却是每个线程互不相干,因此线程间使用这些MFC类的话,会造成handle map的混乱,轻则程序出错,重则程序崩溃。
至于为什么要使用handle map,原因也很简单:因为Windows句柄显然是唯一的,但MFC用C++类来包装Windows句柄时,如果不加任何保护措施,很可能造成两个C++对象同时与一个Windows句柄关联。设想一下,两个CWnd同时关联到一个HWND上,而两个CWnd对象各自有各自的消息映射,那么这个窗口的行为将是难以预料的。因此,用handle map来作保护,当你调用诸如Attach之类的函数时,MFC会查找handle map,如果已有对象与之关联,Attach就失败。同理,MFC还用handle map来维护GetParent、FromHandle这类函数返回的临时对象。
http://book.77169.org/ask32/how129308.htm
dychenyi收录,时间:2008-3-25 16:56:42 | 相关网摘,我也收藏
1,在pritf语句中,表达式从右向左计算。
2,++ptr是在printf执行过程之中计算的。
3,ptr++是在printf执行完成以后计算的。
4,以下四个表达式执行之后结果一样的:
*(ptr++)=*(ptr++)+123;
*(++ptr)=*(++ptr)+123;
*(++ptr)=*(ptr++)+123;
*(ptr++)=*(++ptr)+123;
5,下面这个表达式和上面的四个执行之后结果是不一样的,:
http://www.net0791.com/article/45552.htm
共539个网摘 [
1 2 3 4 5 6 7 8 9 10 11 ...
18 ]
上一页 |
下一页