请教:线程中处理数据库问题。急急急!!!!

gerogeyzl 2003-10-20 06:13:49
线程函数如下:
UINT ThreadProc(LPVOID pParam)
{
CDaoDatabase m_System_Database;
CSystemSet m_SystemSet;

if (! m_System_Database.IsOpen())
{
try
{
m_System_Database.Open("C:\\system.mdb");
}
catch (CDaoException* e)
{
AfxMessageBox(e->m_pErrorInfo->m_strDescription);
e->Delete();
return false;
}
}
//如果找不到指定的Access数据库文件,报错退出
if (!m_System_Database.IsOpen())
{
MessageBox(NULL,"打开数据库system.mdb错误!\n请检查一下该文件是否在当前目录中。","error",MB_OK|MB_ICONERROR);
return false;
}

//初始化各个CDaoRecordset子类变量
m_SystemSet.m_pDatabase = &m_System_Database;
try
{
m_SystemSet.Open();
}
catch(CDaoException* e)
{
AfxMessageBox(e->m_pErrorInfo->m_strDescription);
e->Delete();
return false;
}

m_SystemSet.m_strSort="SystemNo";
m_SystemSet.Requery();

//=====读取数据库记录
....
//======
return 1;
}


CMyClassDlg是基于对话框的类。


//按钮单击函数
CMyClassDlg::OnButton1()
{
AfxBeginThread(MyThreadProc,NULL);
}

按钮单击函数中只启动一个线程,能够获得数据库的记录,但关闭应用程序(基于对话框)时,报内存访问错,请教各位大侠,原因是什么???
...全文
32 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
gerogeyzl 2003-10-20
  • 打赏
  • 举报
回复
谢谢!我试过了,好像不行!提示是内存访问错误??
vcforever 2003-10-20
  • 打赏
  • 举报
回复
有可能是你的线程函数没有结束的时候你就关闭了对话框造成了内存泄漏,你可以这样来改写你的代码:
首先在你的对话矿中定义一个CWinThread类型的指针CWinThread *m_pThread用来存放AfxBeginThread()函数的返回值
//按钮单击函数
CMyClassDlg::OnButton1()
{
m_pThread = AfxBeginThread(MyThreadProc,NULL);
}
然后在你的对话框的关闭函数中
CMyClassDlg::OnClose()
{
WaitForSingleObject(m_pThread->m_hThread,500);
CloseHandle(m_pThread->m_hThread);
}
应该就可以解决问题了!
祝你成功!

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧