一直被com的问题所困扰,写一个小程序,用到ADO连网络数据库,感觉连数据库的时候有点慢,我想用ADO用子线程来连数据库,并且当数据库断开后可以自动重连的程序。
我看到有的说每个线程中都要CoInitialize一次,有的说这样会出现问题。
有的说只要在主线各中CoInitializeEx一次,有的说也要每个线程中CoInitializeEx一次。困惑:
1.多线程中到底用哪个初使化com
2.多线程中是不是每个线程都要初使化com
3.如果每个线程中都要初使化com的话,在每个线程结束时是不是也要CoUninitialize忘兄弟们帮助一下,如果有这样的实例程序更好。一直在网上没找到明确的答案,麻烦各位了!!!

解决方案 »

  1.   

    简单来说,在每个线程中都CoInitialize一次,使用结束后CoInitialize一次
      

  2.   

    只要在主线程中CoInitializeEx一次
      

  3.   

    每个线程都需要初始化,否则com控件将无法使用
      

  4.   

    不需要每个线程都用,只要在主线程开始时和结束时配对写上即可,那两函数只是对com的初始化和释放而已。
      

  5.   

    在每个线程函数里,如果要使用COM对象就需要调用CoInitialize或CoInitializeEX
    在线程退出的时候释放.
    当然如果你的线程不需要COM对象,就没必调用.
      

  6.   

    问一下,CoInitialize和CoInitializeEX 有什么区别?照楼上说的,好像是一样的了??
      

  7.   

    我在线程中可以用全局变量的ado 的连接之类的东西吗?
      

  8.   

    谢谢各位的热心回答,万分感谢,我现在总结一下:大家看有什么问题
    如果涉及到多线程,如果线程中用到com的话,每个线程都要CoInitialize,在线程结束时CoUninitialize ;还有一事不明:
    CoInitialize和CoInitializeEX 有什么区别
      

  9.   

    CoInitializeEx provides the same functionality as CoInitialize and also provides a parameter to explicitly specify the thread's concurrency model. The current implementation of CoInitialize calls CoInitializeEx and specifies the concurrency model as single-thread apartment. Applications developed today should call CoInitializeEx rather than CoInitialize. 
      

  10.   

    我现在总结一下:大家看有什么问题 
    如果涉及到多线程,如果线程中用到com的话,每个线程都要CoInitialize,在线程结束时CoUninitialize ; ///////////
    目前可以这么理解,但其实这个也依赖于组件实现了哪种套件,然后程序员去初始化相应的套件,这样才比较有效率
      

  11.   

    如果线程中用到com的话,每个线程都要CoInitialize,在线程结束时CoUninitialize ; 是正解,给分!