多线程数据库操作异常

weixin_44046152 2020-05-10 04:44:04
写了个MFC客户端和控制台服务器的软件
运行到数据库操作时
inline HRESULT Recordset15::Close ( ) {
HRESULT _hr = raw_Close();
if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
return _hr;
单线程的没有错误hr = s_ok
多线程时hr就没有正常返回

这是什么问题
是多线程操作数据库有什么必要的要求么
...全文
164 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_44046152 2020-05-10
  • 打赏
  • 举报
回复
问题解决了,我在主函数中定义了一个对象,又在全局变量中定义了一个对象
屏蔽主函数的CManager man 对象,就没出现那个问题了

#include "pch.h"
#include "CManager.h"
CManager man;

int main()
{
//CManager man;
return man.Start();
}
weixin_44046152 2020-05-10
  • 打赏
  • 举报
回复
extern CManager man;
DWORD WINAPI theProc(LPVOID p)
{
CSockLx* pSocka = (CSockLx*)p;
while (man.OnReceive(pSocka))
;
return 0;
}

int CManager::Start()
{
//连接数据库 若连接失败则弹出错误
if (!m_ado.Connect(CAdoLx::DBT_ACCESS, _T("./jiuye.accdb")))
std::cout << "数据库连接失败:" << std::endl;

if (!m_sock.Create(SERVER_PORT))
{
std::cout << "创建端口失败:" << WSAGetLastError() << std::endl;
return -1;
}
m_sock.Listen();
WCHAR szIP[20];
UINT nPort;
//单线程
/* CSockLx Socka;
char* ip;
while (m_sock.Accept(Socka, szIP, &nPort))
{
ip = UnicodeToASCII(szIP);
std::cout << ip << "-" << nPort << "的用户已登录" << std::endl;
while (OnReceive(&Socka))
;
Socka.Close();
}*/
//多线程
CSockLx *pSocka = new CSockLx;
char* ip;
while (m_sock.Accept(*pSocka, szIP, &nPort))
{
ip = UnicodeToASCII(szIP);
std::cout << ip << "-" << nPort << "的用户已登录" << std::endl;
CreateThread(NULL, 0, theProc, pSocka, 0, NULL);
pSocka = new CSockLx;
}
return 0;
}

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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