一个线程有它自己的一块内存。说白了,MFC就是把句柄和C++对象之间进行了关联,譬如,一个句柄,对应一个CWnd对象。明白了这个就好办了,要映射,就要有一张表,对不对?MFC把这个表放在了线程相关的存储块中,这个存储块叫做TLS,Thread Local Storage。 回头再来看Windows,你知道它是一个多线程的os,cpu在不同线程之间来回切换,线程一旦切换,随之相关的一大堆东西,都要换,比如切换时CPU的寄存器值啦,页表啦,等等。这一换,MFC用来进行关联的表也就换了,句柄还是那个句柄,可是文不对题,对不上号了,完了,MFC找不到对应的对象了,于是,当就一个字。
回头再来看Windows,你知道它是一个多线程的os,cpu在不同线程之间来回切换,线程一旦切换,随之相关的一大堆东西,都要换,比如切换时CPU的寄存器值啦,页表啦,等等。这一换,MFC用来进行关联的表也就换了,句柄还是那个句柄,可是文不对题,对不上号了,完了,MFC找不到对应的对象了,于是,当就一个字。