为了账号安全,请及时绑定邮箱和手机立即绑定

你能解释一下STA和MTA吗?

你能解释一下STA和MTA吗?

泛舟湖上清波郎朗 2019-06-23 16:05:55
你能解释一下STA和MTA吗?你能用你自己的话解释一下STA和MTA吗?另外,什么是公寓线程,它们只涉及COM吗?如果是,为什么?
查看完整描述

3 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

COM线程模型称为“单元”模型,其中初始化的COM对象的执行上下文与单个线程(单线程单元)或多个线程(多线程单元)相关联。在此模型中,COM对象一旦在公寓中初始化,就会在运行时期间成为该单元的一部分。

STA模型用于非线程安全的COM对象。这意味着它们不处理自己的同步。这是一个常用的UI组件。因此,如果另一个线程需要与对象交互(例如按下表单中的按钮),则消息被编组到STA线程上。Windows窗体消息泵系统就是一个例子。

如果COM对象可以处理自己的同步,那么可以使用MTA模型,其中允许多个线程与对象交互,而不需要编组调用。


查看完整回答
反对 回复 2019-06-23
?
函数式编程

TA贡献1807条经验 获得超9个赞

我觉得现有的解释太过分了。以下是我用简单英语所作的解释:

sta:如果一个线程创建一个设置为STA的COM对象(当调用CoCreateXXX时,您可以传递一个将COM对象设置为STA模式的标志),那么只有这个线程才能访问这个COM对象(STA的意思是-单线程单元),其他试图调用这个COM对象的线程就会被悄悄地转换成将消息传递给创建(拥有)COM对象的线程。这非常类似于这样一个事实:只有创建UI控件的线程才能直接访问它。这种机制是为了防止复杂的锁/解锁操作。

MTA:如果一个线程创建一个被设置为MTA的COM对象,那么几乎每个线程都可以直接调用它上的方法。

这几乎就是它的要旨。虽然从技术上讲,我没有提到一些细节,比如在‘STA’段落中,创建者线程本身必须是STA。但要理解STA/MTA/NA,这是你所要知道的。


查看完整回答
反对 回复 2019-06-23
  • 3 回答
  • 0 关注
  • 730 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信