多线程中对COM的初始化CoInitialize应该注意的问题

使用COM组件时,通常的做法是在main函数的最前面调用CoInitialize(NULL);,最后面调用CoUninitialize();

今天遇到一个问题是在线程中使用COM组件失败了,我就怀疑线程中也需要初始化COM。也就是说:COM的初始化是以线程为单位的。

搜索了下,这篇文章说的比较详细:http://blog.csdn.net/zhengxh/article/details/6973100,用反汇编的方式获取了COM初始化的整个详细过程。

时间: 2024-10-11 13:31:02

多线程中对COM的初始化CoInitialize应该注意的问题的相关文章

多线程 中 对多次初始化问题解决方案

今天在看MSDN 库源代码时发现了一个类 LazyInitializer.EnsureInitialized 并行计算时用到的. MSdn代码 // Used to hold any exceptions encountered during action processing ConcurrentQueue<Exception> exceptionQ = null; // will be lazily initialized if necessary // This is more effi

c#初学-多线程中lock用法的经典实例

本文转载自:http://www.cnblogs.com/promise-7/articles/2354077.html 一.Lock定义     lock 关键字可以用来确保代码块完成运行,而不会被其他线程中断.它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待.这是通过在代码块运行期间为给定对象获取互斥锁来实现的. 在多线程中,每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数.这可能带来的问

c#语言-多线程中的锁系统

介绍 平常在多线程开发中,总避免不了线程同步.这次就对net多线程中的锁系统做个简单描述. 目录 一:lock.Monitor 1:基础. 2: 作用域. 3:字符串锁. 二: mutex 三:Semaphore 四:总结 一:lock.Monitor 1:基础 Lock是Monitor语法糖简化写法.Lock在IL会生成Monitor. //======Example 1===== string obj = "helloworld"; lock (obj) { Console.Wri

C++中组合和继承的初始化

在C++中单个类的初始化比较简单就略过不说. 当一个类继承了另外一个类,或者是一个类中还存在一个类 class A{ ... }: class B { ... }: class C:classA{ private: B bb; int x public: C(int ii):B(ii),bb(ii) ,x(ii){}; }: 此时我们进行初始化的设置采用的 C(int ii):B(ii),bb(ii), x(ii)这里必须说清楚的有几点: 1.参数是通过C(int ii)向冒号之后的类或者是变量

Java核心知识点学习----多线程中的阻塞队列,ArrayBlockingQueue介绍

1.什么是阻塞队列? 所谓队列,遵循的是先进先出原则(FIFO),阻塞队列,即是数据共享时,A在写数据时,B想读同一数据,那么就将发生阻塞了. 看一下线程的四种状态,首先是新创建一个线程,然后,通过start方法启动线程--->线程变为可运行可执行状态,然后通过数据产生共享,线程产生互斥---->线程状态变为阻塞状态---->阻塞状态想打开的话可以调用notify方法. 这里Java5中提供了封装好的类,可以直接调用然后构造阻塞状态,以保证数据的原子性. 2.如何实现? 主要是实现Blo

编写高质量代码改善C#程序的157个建议——建议66:正确捕获多线程中的异常

建议66:正确捕获多线程中的异常 多线程的异常处理需要采用特殊的方式.一下这种方式会存在问题: try { Thread t = new Thread((ThreadStart)delegate { throw new Exception("多线程异常"); }); t.Start(); } catch (Exception error) { MessageBox.Show(error.Message + Environment.NewLine + error.StackTrace);

thread.join函数,java多线程中的join函数解析

join函数的作用,是让当前线程等待,直到调用join()的 线程结束或者等到一段时间,我们来看以下代码 1 package mian; 2 3 4 public class simpleplela { 5 static void threadMessage(String message) { 6 String threadName = 7 Thread.currentThread().getName(); 8 9 System.out.println(threadName+" "+m

(单例设计模式中)懒汉式与饿汉式在多线程中的不同

/* 目的:分析一下单例设计模式中,懒汉式与饿汉式在多线程中的不同! 开发时我们一般选择饿汉式,因为它简单明了,多线程中不会出现安全问题! 而饿汉式需要我们自己处理程序中存在的安全隐患,但是饿汉式的程序技术含量更高! */ /* class SinglePerson implements Runnable{ private static SinglePerson ss = new SinglePerson("hjz", 22);//恶汉式 private int age; privat

中颖SH79F1616 timer5初始化程序

//========timer5.h============================================= #ifndef _TIMER5_H_ #define _TIMER5_H_ //#include "timer5.h" //==timer5 define===== #define TIM5_DIV1 (0<<4) #define TIM5_DIV8 (1<<4) #define TIM5_DIV64 (2<<4) #def