【问题标题】:Coinitialize(nil) and CoInitializeEx(0, COINIT_MULTITHREADED) differenceCoinitialize(nil) 和 CoInitializeEx(0, COINIT_MULTITHREADED) 的区别
【发布时间】:2013-11-21 19:51:35
【问题描述】:

在一个线程中, 如果我使用

有区别吗
Coinitialize(nil)

而不是

CoInitializeEx(0, COINIT_MULTITHREADED);

我使用的是 Delphi 7,但我认为这个问题对于其他编程语言仍然存在 感谢您的帮助。

【问题讨论】:

  • 你阅读CoInitialize上的文档了吗?
  • 是的,但不清楚
  • 也许您可以详细说明您在处理文档的哪一部分。

标签: delphi com delphi-7


【解决方案1】:

前者以将调用线程放入其自己的单线程单元 (STA) 的方式初始化 COM。后者以将调用线程放入共享多线程单元 (MTA) 的方式初始化 COM。这两个单元具有非常不同的语义,尤其是在如何跨线程边界访问 COM 对象方面。不同单元中的线程必须使用代理来共享 COM 对象,但 COM 为您提供同步(通过每个线程的消息队列)。同一单元中的线程可以在不使用代理的情况下共享 COM 对象,但必须手动同步,例如使用临界区或互斥锁。

所以是的,存在差异,并且可能非常重要。请阅读MSDN上的文档,非常详细。

CoInitialize function

CoInitializeEx function

Processes, Threads, and Apartments

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-14
    • 2021-11-16
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多