寫了個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就沒有正常回傳
這是什么問題
是多執行緒操作資料庫有什么必要的要求么
uj5u.com熱心網友回復:
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;
}
uj5u.com熱心網友回復:
問題解決了,我在主函式中定義了一個物件,又在全域變數中定義了一個物件屏蔽主函式的CManager man 物件,就沒出現那個問題了
#include "pch.h"
#include "CManager.h"
CManager man;
int main()
{
//CManager man;
return man.Start();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/67778.html
標籤:C++ 語言
上一篇:puts(a)的輸出結果:
