写组件遇到了一点问题,有了点看法,各位帮忙看一下!!

john1980 2002-04-19 02:24:03
你好!不好意思
冒昧的像你请教几个问题: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中,所以此时不能看到全局数据区的改变。
...全文
91 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
john1980 2002-04-19
  • 打赏
  • 举报
回复
另外,就是mta组件的方法代码在何处被执行?
是在线程上
还是mta组件自己的线程?

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧