在主线程和工作线程中加载动态库(内部调用COM dll)有什么区别?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在主线程和工作线程中加载动态库(内部调用COM dll)有什么区别?相关的知识,希望对你有一定的参考价值。
任何机构都能告诉我在主线程和工作线程中加载动态库(内部调用COM dll)之间有什么区别。
提前致谢
大多数情况下,由于应用程序开发语言的支持,主线程上几乎不需要使用COM。 例如,使用项目创建向导检查OLE / COM选项。 但是,在工作线程中使用多个工作线程并使用COM时,需要执行以下操作。
使用COM的工作线程必须在线程的开头初始化OLE(在创建/使用COM对象之前)。 对于Win32 API,它是CoInitialize() / CoInitializeEx()。 或者,根据应用程序开发语言,将有相同的函数和库,所以请调用它。
使用COM的工作线程必须独立于负责UI的主线程执行的Windows消息处理循环执行自己的消息处理循环。
请注意正在使用的COM组件。 如果注册了COM组件的ThreadingModel in the registry的值是空字符串(没有设置任何内容),则可能不会向工作线程通知事件,并且可能引发异常。 如果此注册表中没有任何值,请写“公寓”。
请基本上仅从创建的线程使用COM对象。 如果从另一个不是创建COM对象的线程的线程调用COM对象,则可能发生错误或者可能无法执行正常操作。
补充说明: 为了终止工作线程,必须执行上述清理。 终止并释放COM对象,停止消息处理循环,调用CoUnintialize(),等等。 必须终止/释放在工作线程内创建/分配的资源。
以上是关于在主线程和工作线程中加载动态库(内部调用COM dll)有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用cmake和Android NDK在C ++中加载线程支持
在主线程上处理大型全局对象时如何不阻止来自工作线程的主 UI 线程
在 HikariConfig 类加载器或线程上下文类加载器中加载驱动程序类 com.mysql.cj.jdbc.Driver 失败