环境:win2k + vc6 +sp5
数据库访问方式:ADO
问题描述:
在一个线程中做了数据库读取操作。不定期出现错误(终止/重试/忽略).点击忽略程序继续正常运行。点击重试报内存异常,点击取消进入调试,发现在CreateInstance(...)里出现异常。开始怀疑是在线程中使用COM组件要重新初始化com,于是在线程开始时增加CoInitalize(NULL),结束时增加CoUninitialize().错误仍然不定期出现。求教高手!

解决方案 »

  1.   

    在线程启动的时候CoInitalize(),结束的时候CoUninitialize()
    将所有ADO操作或者COM操作用try....catch包含起来,怎么会错呢?
      

  2.   

    线程中调用的是另一个类的函数,通过线程函数的参数LPVOID pParam传入类的指针。该函数有数据库读取操作(当然有try...catch操作)。
      

  3.   

    没有2个worker线程通过同一个数据库连接访问数据库的情况(当然UI在通过这个连接访问数据库)。我觉得这样做应该没有问题的。另外需要说明的是,数据库连接以及操作都是在另外一个DLL的类中做的。我是通过参数的方式把有数据库连接和操作类的指针传到我的类中。然后把我的类的指针传给线程。