13

在一个线程中,如果我使用有区别吗

Coinitialize(nil)

代替

CoInitializeEx(0, COINIT_MULTITHREADED);

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

4

1 回答 1

16

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

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

初始化函数

CoInitializeEx 函数

进程、线程和单元

于 2013-11-09T20:02:56.683 回答