线程中DAO数据库访问问题.
小弟的以下代码没有抛出任何异常,结果最后程序结束前发生内存不能access的错误
ThreadFunc 是线程的执行函数
UINT ThreadFunc(LPVOID lParam)
{
...
CString str;
CDaoDatabase* pdb = new CDaoDatabase;
str = _T("c:\\data.mdb");
openDatabase(&pdb,str);
closeDatabase(&pdb);
...
}
但是在一般的函数,比如按钮的相应函数中
void CExp1Dlg::OnButtonTest()
{
CString str;
CDaoDatabase* pdb = new CDaoDatabase;
str = _T("c:\\data.mdb");
openDatabase(&pdb,str);
closeDatabase(&pdb);
}
就没有问题.
调试出错在下面加*****的行,不能释放
void AFXAPI AfxDaoTerm()
{
_AFX_DAO_STATE* pDaoState = AfxGetDaoState();
// Close any CDaoWorkspaces left around
void* pvKey;
void* pvObject;
POSITION pos = pDaoState->m_mapWorkspaces.GetStartPosition();
while (pos != NULL)
{
pDaoState->m_mapWorkspaces.GetNextAssoc(pos, pvKey, pvObject);
((CDaoWorkspace*)pvObject)->Close();
}
pDaoState->m_mapWorkspaces.RemoveAll();
// Clean up engine object if necessary
if (pDaoState->m_pDAODBEngine != NULL)
{
pDaoState->m_pDAODBEngine->Release();***************
pDaoState->m_pDAODBEngine = NULL;
}
......
}