写组件遇到了一点问题,有了点看法,各位帮忙看一下!!
你好!不好意思
冒昧的像你请教几个问题:1是关于同一个dll中sta和mta(both)间共享数
据的问题。 2 是关于线程环境的问题。这是一个atl dll。设sta的实现类sta1
,mta的实现类 mta1。
第一个方案:我想,在同一个工程中,采用静态类成员应该可以把。于是,
我就在mta1中定义了一个静态成员。首先线程a进入apartment,通过mta1::
static 来给静态成员赋值,然后有加载mta1在这个 单线程公寓中,结果发现
mta1地静态成员在这个mta中没有改变。就是一个类的静态成员说了是被所有的
类对象共享,这个“所有的类对象”究竟是在什么范围内?肯定不是在进程范围
内了。
第二个方案:在stdafx.h 文件中加了一个全局成员。
1 如果mta创建在和sta相同的一个sta中,mta可以看到sta中对数据的修
改。
2 但是,当线程a调用sta改变数据成员后,a线程进入mta公寓。mta创建
在MTA中,不能看到sta中方法对全局数据的修改。
在第二个方案中,情况1:是不是因为sta和mta在同一个单线程公寓中,
共享同一个数据区。我认为组件对象的全局数据应该是放在与该sta公寓相关的
一个数据区中(当然,单线程公寓同时和某个特定的线程相联系);而不是放在
tls中。这样,当mta 被加载sta的同一个线程加载后,如果mta1被创建在与sta
相同的公寓中,它就能看到与公寓相关的全局数据。如果mta1被创建在mta,由
于全局数据没有放在tls中,所以此时不能看到全局数据区的改变。