Multithreading COM线程模型-永久混乱
我一直在阅读有关COM线程模型的MSDN文章。在年,我遇到了以下几行: 与其他服务器一样,进程内服务器 可以是单线程, 单元线程,或自由线程 我不知道放什么(COM客户端线程和COM服务器对象)以及放在哪里Multithreading COM线程模型-永久混乱,multithreading,com,model,Multithreading,Com,Model,我一直在阅读有关COM线程模型的MSDN文章。在年,我遇到了以下几行: 与其他服务器一样,进程内服务器 可以是单线程, 单元线程,或自由线程 我不知道放什么(COM客户端线程和COM服务器对象)以及放在哪里 如果COM客户端线程调用coinitializex(COINIT\u multi threaded),是否会在MTA上创建可能有多个对象的对象并将此线程放入其中 如果CoInitializeEx(NULL),那么它是否会创建一个新的单元(如果不存在),并将此对象和线程放入其中 若客户端不调
- 如果COM客户端线程调用
,是否会在MTA上创建可能有多个对象的对象并将此线程放入其中coinitializex(COINIT\u multi threaded)
- 如果
,那么它是否会创建一个新的单元(如果不存在),并将此对象和线程放入其中CoInitializeEx(NULL)
- 若客户端不调用
,那个么它将创建一个“主机”线程,创建对象并将对象和线程放在其中?这就是上面提到的线所称的单线程吗CoInitialize
- 不太可能,COM服务器会在注册表中用ThreadingModel值宣布它们支持的线程模型。这通常是“公寓”(或失踪,同样的事情)。COM将创建一个STA线程,给它一个安全的家。只有当它说“两者”或“自由”时,才会在线程上创建对象,并且不需要封送处理
- 是的,这将创建一个STA单元,对象将位于该线程上,而不管其ThreadingModel如何
- 不调用CoInitialize将导致任何COM API失败,包括尝试创建COM对象