gpt4 book ai didi

windows - 为什么 COM+ 忽略单元线程模型?

转载 作者:可可西里 更新时间:2023-11-01 11:22:49 26 4
gpt4 key购买 nike

我有一个 STA COM 组件,它被放入 COM+ 应用程序中。客户端在该组件中创建该类的多个实例并并行调用它们的方法。该类已正确注册 - 相应类 ID 的“ThreadingModel”为“Apartment”。

我看到在组件内部并行执行同一个类的同一个方法的多个调用——在实际的组件代码中。它们在同一个进程中执行,但在不同的线程中执行。

这是怎么回事? COM+ 是否忽略了线程模型? STA 模型不应该一次只允许执行一个调用吗?

最佳答案

为了避免混淆,我不会在这个答案中使用术语“对象”。相反,让我们使用“类”和“实例”。我相信我们都了解它们之间的区别。

用“Apartment”的 ThreadingModel 标记您的 COM 类意味着它的实例将被加载到 STA 中。创建这些实例的过程将决定它们是全部进入同一个 STA,还是进入不同的 STA。

正如您所发现的,COM+ 已将多个实例加载到单独的 STA 中。

您使用 STA 获得的保证是单个实例永远不会被多个线程同时访问。同一类的不同实例,如果它们被加载到不同的 STA,当然可以同时被不同的线程访问。

所以 STA 实际上是一种保护实例数据的方法。不是你的类(class)数据。您必须保护 COM 代码中的任何“共享”或“静态”数据。

关于windows - 为什么 COM+ 忽略单元线程模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/861871/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com