MFC对象与WIN32句柄的映射-TLS

1、没有办法把一个MFC某线程交到另一个线程,不能在线程间传递MFC对象指针,包括常用的MFC对象如CWND、CDC、CFONT等。

2、如果两个线程都调用CWND::GETDLGITEM()以取得对话框中的一个控件(如EDIT),则每个线程获得不同的指针,当对此指针的一个索求行为出现时,MFC产生出一些临时性对象,这些对象若被许多线程共享,MFC没有能力预期它们的生命。
3、这个限制是说,你不能放一个指针到结构中,而该结构被一个WORKER线程使用,你不能把一个指向CDIALOG或CVIEW的指针交给另一个线程
4、TLS的使用说明了以AFXBEGINTHREAD()在MFC程序中产生UI线程的重要性,在线程间共享对象,有个替代方案,不要放置MFC对象,放对象的HANDLE,可以利用GETSAFEHANLE获得对象的安全HANDLE,还可以用GETSAFEHWND()。
5、当你把HANDLE给新线程时,线程可以把该HANDLE附着到一个新的MFC对象:使用FROMHANDLE产生一个临时对象,使用ATTACH()产生一个永久对象。
6、MFC同步控制类如LOCK()和UNLOCK()
7、对于MSGWAITFORMULTIPLEOBJECTS()的支持,MFC自己运行消息循环,如何解决呢?
(1)产生另一个线程用来等待,当对象被激发时即送出一个消息给主线程。
(2)改写MFC消息循环,它存在于CWINTHREAD::RUN()和CWINTHREAD::PUMPMESSAGE()中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值