微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

delphi – Coinitialize(零)和CoInitializeEx(0,COINIT_MULTITHREADED)的区别

一个线程中,
如果我使用,是否有区别
Coinitialize(nil)

代替

CoInitializeEx(0,COINIT_MULTITHREADED);

我使用Delphi 7,但我认为这个问题可以保留给其他编程语言
谢谢你的帮助.

解决方法

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

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

CoInitialize function

CoInitializeEx function

Processes,Threads,and Apartments

原文地址:https://www.jb51.cc/delphi/101168.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐