据《win32多线程程序设计》上说,由于mfc对象和它的handle的映射关系放在TLS中,所以不可以跨线程传递mfc对象(如CView、CWnd、CPen等)时,传递这些对象的指针也不可以,只能传递handle。
对于这段描述我一直不懂,为什么mfc对象和它的handle的映射关系放在TLS中就不能跨线程传递mfc对象呢?

解决方案 »

  1.   

    http://tech.99soft.net/h/2004-4-1/106941.htm
      

  2.   

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

  3.   

    最最关键,你要知道TLS是什么东西。
      

  4.   

    那是不是说mfc的dll无法进行远程线程注入