在VC下出现的问题,现将问题描述如下:
程序中有两个线程:主线程,Mytheard;
在主线程(MFC基于单文档),的DOC类中,添加了成员:CMyDB m_MyDB;
CMyDB中包括public的数据成员指针:_ConnectionPtr m_pConnectDB;
那么现在我想在Mytheard线程中(入口参数为VIEW类的this),然后调用:p_View->p_Doc->m_MyDB.m_pConnectDB访问数据库,为什么会在程序退出报错呢?
我经调试发现:
1Mytheard从进入到退出都是对的,但Mytheard退出后,程序退出时却报错。
2绝对和数据库相关,因为如果不连接数据库就不会出报错。不管是否访问,只要连接,也即调用了_ConnectionPtr的函数就会出错。我在网上查看了一些内容,据说ConnectionPtr 是一个智能指针,不能像用一般指针那样用它。与COM原理相关。我想请教一下解决的方法是什么?
3.Mytheard的第一句为:coinitialize,结束前用:CoUninitialize。
主线程在APP中的initalistance中调用:AfxOleInit.这些应该正确吧。(改成coinitialize,CoUninitialize成对调用效果一样)
整体上我想做的事情就是在DOC中定义一个包含 ConnectionPtr 数据成员的对象。
然后在主线程和自定义的线程中都能通过该对象ConnectionPtr来访问数据库。