我在程序中开了一个线程来连接数据库,防止启动程序时候卡机. 连接不上数据库,提示"尚未调用 CoInitialize",于是我在线程函数中初始化COM:CoInitialize(NULL),连接成功了.  
我的问题是:我不用CoInitialize(NULL)来初始化COM,而只是sleep(1000)了一下,或者AfxMessageBox("")来打断一下线程函数体的执行也可以连接成功.  这个现象是说明,执行线程的时候会自动初始化COM,但是会耗时吗? 
懂的大侠能解释哈嘛......

解决方案 »

  1.   

    不是吧,你把COM:CoInitialize(NULL)放在启动线程前,试试,如果这条语句紧接着就是启动线程,这时还出提示,那就是说明初始化COM需要点时间,这时可以把启动线程放在初始化函数的最后,这样应该不会出提示了
      

  2.   

    CoInitialize(NULL);这个当然是当放在线程函数体的最开始啊.  如下:
    DWORD __stdcall MyThread(LPVOID lpParam)
    {
       CoInitialize(NULL);  //这里用sleep或者消息盒子打断一下也可以连接成功
       ........;            //(连接数据库的过程)
    }
      

  3.   

    我就是想知道为什么打断一下就能解决这个问题.  是像我说的那样初始化COM会自动进行,只是会耗时吗?? 
      

  4.   

    我是说你把这个初始化放在APP类里的Initinstance(好象是这个函数,就是程序开始运行的初始化函数数),然后再在你想创建线程的类里创建线程,这样看看还是不是出提示,我感觉是还没初始化完成线程就运行了.
      

  5.   

    理论上每个线程都应该初始化COM库