亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? visual c++多線程dao處理 .txt

?? vlan的設置Visual C++多線程DAO處理
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
Visual C++多線程DAO處理 

 
  在DAO多線程處理中,有許多局限性,所以我設計了這么一個類,通過GUI線程來使用DAO的強制調(diào)用。在類中使用了GUI的消息隊列,所有進入到CMultiDAORecordset的調(diào)用都被迫使用AfxGetThread()來檢查當前的線程。GUI線程指針是放在InitInstance的首端,如果在GUI線程中,引入的調(diào)用請求不在運行,那么CMultiDAORecordSet就會發(fā)送一個WM_MULTIDAOMESSAGE消息給AfxGetMainWnd()(在Mainfrm.cpp中)。Mainfrm接受到這個消息,線程也就要再運行一次,這個時候,消息已經(jīng)接受了,基類CDaoRecordset也就得到了調(diào)用。所以你的類是從CMultiDAORecordset繼承的,而不是CDaoRecordset,如下: 

class CMySet : public CMultiDaoRecordSet

在相應的CPP文件中也應該改一下:

IMPLEMENT_DYNAMIC(CMySet, CMultiDaoRecordSet)

CMySet::CMySet (CDaoDatabase* pdb) : CMultiDaoRecordSet(pdb) 
為了處理接受到的WM_MULTIDAOMESSAGE消息,下面的代碼還應該加在MainFrm中:

在MainFrm.h文件中加:
#ifdef MAINFRAME_CPP 
UINT WM_MULTIDAOMESSAGE = RegisterWindowMessage("WM_MULTIDAOMESSAGE"); 
#else 
extern UINT WM_MULTIDAOMESSAGE; 
#endif 

afx_msg LONG OnMultiDaoMessage( UINT uParam, LONG lParam); 
在MainFrm.cpp文件中加:
#define MAINFRAME_CPP 

#include "MutliDaoRecordset.h" 

//added to the message map 

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd) 
//{{AFX_MSG_MAP(CMainFrame) 
ON_REGISTERED_MESSAGE(WM_MULTIDAOMESSAGE, OnMultiDaoMessage) 
END_MESSAGE_MAP() 

//this function added 
LONG CMainFrame::OnMultiDaoMessage( UINT uParam, LONG lParam) 
{ 
//jtm 
//based on switch, perform operation... 
CMultiDaoRecordSet *pSet = (CMultiDaoRecordSet *)lParam; 
LONG lRet = 0; 

CString cRet = ""; 
COleVariant cVar; 

try 
{ 
//jtm-------debug-------------------------------------- 
CString cTraceMessage = cDAOMessageArray[uParam]; 
cTraceMessage += "\n"; 
TRACE(cTraceMessage); 
//jtm-------debug-------------------------------------- 

switch(uParam) 
{ 
case MultiDaoOpen: 
pSet->Open(); 
break; 
case MultiDaoClose: 
pSet->Close(); 
break; 
case MultiDaoIsOpen: 
lRet = (LONG)pSet->IsOpen(); 
break; 
case MultiDaoIsBOF: 
lRet = (LONG)pSet->IsBOF(); 
break; 
case MultiDaoIsEOF: 
lRet = (LONG)pSet->IsEOF(); 
break; 
case MultiDaoIsDeleted: 
lRet = (LONG)pSet->IsDeleted(); 
break; 
case MultiDaoIsFieldDirty: 
lRet = (LONG)pSet->IsFieldDirty(pSet->pParam1); 
break; 
case MultiDaoIsFieldNull: 
lRet = (LONG)pSet->IsFieldNull(pSet->pParam1); 
break; 
case MultiDaoIsFieldNullable: 
lRet = (LONG)pSet->IsFieldNullable(pSet->pParam1); 
break; 
case MultiDaoGetName: 
cRet = pSet->GetName(); 
lRet = (LONG)&cRet; 
break; 
case MultiDaoGetType: 
lRet = (LONG)pSet->GetType(); 
break; 
case MultiDaoGetEditMode: 
lRet = (LONG)pSet->GetEditMode(); 
break; 
case MultiDaoGetLastModifiedBookmark: 
cVar = pSet->GetLastModifiedBookmark(); 
lRet = (LONG)&cVar; 
break; 
case MultiDaoGetRecordCount: 
lRet = (LONG)pSet->GetRecordCount(); 
break; 
case MultiDaoMoveNext: 
pSet->MoveNext(); 
break; 
case MultiDaoMovePrev: 
pSet->MovePrev(); 
break; 
case MultiDaoMoveFirst: 
pSet->MoveFirst(); 
break; 
case MultiDaoMoveLast: 
pSet->MoveLast(); 
break; 
case MultiDaoMove: 
pSet->Move(*(LONG *)pSet->pParam1); 
break; 
case MultiDaoFindNext: 
lRet = (LONG)pSet->FindNext(*(LPCTSTR *)pSet->pParam1); 
break; 
case MultiDaoFindPrev: 
lRet = (LONG)pSet->FindPrev(*(LPCTSTR*)pSet->pParam1); 
break; 
case MultiDaoFindFirst: 
lRet = (LONG)pSet->FindFirst(*(LPCTSTR *)pSet->pParam1); 
break; 
case MultiDaoFindLast: 
lRet = (LONG)pSet->FindLast(*(LPCTSTR *)pSet->pParam1); 
break; 
case MultiDaoFind: 
lRet = (LONG)pSet->Find(*(LONG *)pSet->pParam1, *(LPCTSTR*)pSet->pParam2); 
break; 
case MultiDaoGetBookmark: 
cVar = pSet->GetBookmark(); 
lRet = (LONG)&cVar; 
break; 
case MultiDaoSetBookmark: 
pSet->SetBookmark(*(COleVariant*)pSet->pParam1); 
break; 
case MultiDaoAddNew: 
pSet->AddNew(); 
break; 
case MultiDaoEdit: 
pSet->Edit(); 
break; 
case MultiDaoUpdate: 
pSet->Update(); 
break; 
case MultiDaoDelete: 
pSet->Delete(); 
break; 
case MultiDaoCancelUpdate: 
pSet->CancelUpdate(); 
break; 
case MultiDaoRequery: 
pSet->Requery(); 
break; 
} 
} 
catch (CDaoException *e) 
{ 
TRACE("Database Multithread Operation Failed%s\n", 
e->m_pErrorInfo->m_strDescription); 
} 
return lRet; 
} 

下面的代碼是加在對應的應用程序?qū)ο蟮念^文件中的:
public:
CWinThread *pGUIThread;

And this to the constructor in the app .cpp file:


CMyApp::CMyApp()
{
pGUIThread = AfxGetThread();
}
 

  如果沒有上面的定義的話,你的應用程序就會出問題。整個DAO公共函數(shù)并沒有全部實現(xiàn),但不管怎么樣,上面的函數(shù)是保護CDaoRecordset的使用的。如果你要加個函數(shù)的話,加進去就行了,你也可以用一個對話框來顯示錯誤信息,它們都應該在MultiDaorecordset.h中被定義。為了支持DAO多線程的類,下面的代碼也應該加進去:

加在Multidaorecordset.cpp中:
// MultiDaoRecordSet.cpp : implementation file 
// 

#define MULTIDAORECORDSET_CPP 

#include "stdafx.h" 

#include "MyApp.h" 

#include "MultiDaoRecordSet.h" 

#include "mainfrm.h" 

#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 

///////////////////////////////////////////////////////////////////////////// 
// CMultiDaoRecordSet 

IMPLEMENT_DYNAMIC(CMultiDaoRecordSet, CDaoRecordset) 

CMultiDaoRecordSet::CMultiDaoRecordSet(CDaoDatabase* pdb) 
: CDaoRecordset(pdb) 
{ 
//{{AFX_FIELD_INIT(CMultiDaoRecordSet) 
//}}AFX_FIELD_INIT 
m_nDefaultType = dbOpenDynaset; 
} 

//jtm 
//thread safe destructor.... 
CMultiDaoRecordSet::~CMultiDaoRecordSet() 
{ 
if (IsOpen()) 
Close(); 

// Clean up database if necessary 
if (m_pDatabase != NULL && (m_nStatus & AFX_DAO_IMPLICIT_DB)) 
{ 
m_pDatabase->Close(); 
delete m_pDatabase; 
m_pDatabase = NULL; 
} 
} 

CString CMultiDaoRecordSet::GetDefaultDBName() 
{ 
CMyApp *pApp = ((CMYApp *)AfxGetApp()); 
return pApp->GetDatabaseFullPath(); 
} 

///////////////////////////////////////////////////////////////////////////// 
// CMultiDaoRecordSet diagnostics 

//jtm 
//multi thread safe functoins 
void CMultiDaoRecordSet::Open(int nOpenType, LPCTSTR lpszSQL, int nOptions) 
{ 
CMYApp *pApp = ((CMYApp *)AfxGetApp()); 
if (pApp->pGUIThread == AfxGetThread()) 
{ 
CDaoRecordset::Open(nOpenType, lpszSQL, nOptions); 
} 
else 
{ 
pParam1 = (void *)&nOpenType; 
pParam2 = (void *)lpszSQL; 
pParam3 = (void *)&nOptions; 
AfxGetMainWnd()->SendMessage(WM_MULTIDAOMESSAGE, MultiDaoOpen, (LPARAM)this); 
} 
} 

void CMultiDaoRecordSet::Close() 
{ 
CMYApp *pApp = ((CMYApp *)AfxGetApp()); 
if (pApp->pGUIThread == AfxGetThread()) 
{ 
CDaoRecordset::Close(); 
} 
else 
{ 
AfxGetMainWnd()->SendMessage(WM_MULTIDAOMESSAGE, MultiDaoClose, (LPARAM)this); 
} 
} 

BOOL CMultiDaoRecordSet::IsOpen() 
{ 
CMYApp *pApp = ((CMYApp *)AfxGetApp()); 
if (pApp->pGUIThread == AfxGetThread()) 
{ 
return CDaoRecordset::IsOpen(); 
} 
else 
{ 
return (BOOL)AfxGetMainWnd()-> 
SendMessage(WM_MULTIDAOMESSAGE, MultiDaoIsOpen, (LPARAM)this); 
} 
} 

BOOL CMultiDaoRecordSet::IsBOF() 
{ 
CMYApp *pApp = ((CMYApp *)AfxGetApp()); 
if (pApp->pGUIThread == AfxGetThread()) 
{ 
return CDaoRecordset::IsBOF(); 
} 
else 
{ 
return (BOOL)AfxGetMainWnd()-> 
SendMessage(WM_MULTIDAOMESSAGE, MultiDaoIsBOF, (LPARAM)this); 
} 
} 

BOOL CMultiDaoRecordSet::IsEOF() 
{ 
CMYApp *pApp = ((CMYApp *)AfxGetApp()); 
if (pApp->pGUIThread == AfxGetThread()) 
{ 
return CDaoRecordset::IsEOF(); 
} 
else 
{ 
return (BOOL)AfxGetMainWnd()-> 
SendMessage(WM_MULTIDAOMESSAGE, MultiDaoIsEOF, (LPARAM)this); 
} 
} 

BOOL CMultiDaoRecordSet::IsDeleted() 
{ 
CMYApp *pApp = ((CMYApp *)AfxGetApp()); 
if (pApp->pGUIThread == AfxGetThread()) 
{ 
return CDaoRecordset::IsDeleted(); 
} 
else 
{ 
return (BOOL)AfxGetMainWnd()-> 
SendMessage(WM_MULTIDAOMESSAGE, MultiDaoIsDeleted, (LPARAM)this); 
} 
} 

BOOL CMultiDaoRecordSet::IsFieldDirty(void* pv) 
{ 
CMYApp *pApp = ((CMYApp *)AfxGetApp()); 
if (pApp->pGUIThread == AfxGetThread()) 
{ 
return CDaoRecordset::IsFieldDirty(pv); 
} 
else 
{ 
pParam1 = pv; 
return (BOOL)AfxGetMainWnd()-> 
SendMessage(WM_MULTIDAOMESSAGE, MultiDaoIsFieldDirty, (LPARAM)this); 
} 
} 

BOOL CMultiDaoRecordSet::IsFieldNull(void* pv) 
{ 
CMYApp *pApp = ((CMYApp *)AfxGetApp()); 
if (pApp->pGUIThread == AfxGetThread()) 
{ 
return CDaoRecordset::IsFieldNull(pv); 
} 
else 
{ 
pParam1 = pv; 
return (BOOL)AfxGetMainWnd()-> 
SendMessage(WM_MULTIDAOMESSAGE, MultiDaoIsFieldNull, (LPARAM)this); 
} 
} 

BOOL CMultiDaoRecordSet::IsFieldNullable(void* pv) 
{ 
CMYApp *pApp = ((CMYApp *)AfxGetApp()); 
if (pApp->pGUIThread == AfxGetThread()) 
{ 
return CDaoRecordset::IsFieldNullable(pv); 
} 
else 
{ 
pParam1 = pv; 
return (BOOL)AfxGetMainWnd()-> 
SendMessage(WM_MULTIDAOMESSAGE, MultiDaoIsFieldNullable, (LPARAM)this); 
} 
} 

CString CMultiDaoRecordSet::GetName() 
{ 
CMYApp *pApp = ((CMYApp *)AfxGetApp()); 
if (pApp->pGUIThread == AfxGetThread()) 
{ 
return CDaoRecordset::GetName(); 
} 
else 
{ 
return (CString)*(CString *)AfxGetMainWnd()-> 
SendMessage(WM_MULTIDAOMESSAGE, MultiDaoGetName, (LPARAM)this); 
} 
} 

short CMultiDaoRecordSet::GetType() 
{ 
CMYApp *pApp = ((CMYApp *)AfxGetApp()); 
if (pApp->pGUIThread == AfxGetThread()) 
{ 
return CDaoRecordset::GetType(); 
} 
else 
{ 
return (short)AfxGetMainWnd()-> 
SendMessage(WM_MULTIDAOMESSAGE, MultiDaoGetType, (LPARAM)this); 
} 
} 

short CMultiDaoRecordSet::GetEditMode() 
{ 
CMYApp *pApp = ((CMYApp *)AfxGetApp()); 
if (pApp->pGUIThread == AfxGetThread()) 
{ 
return CDaoRecordset::GetEditMode(); 
} 
else 
{ 
return (short)AfxGetMainWnd()-> 
SendMessage(WM_MULTIDAOMESSAGE, MultiDaoGetEditMode, (LPARAM)this); 
} 
} 

CString CMultiDaoRecordSet::GetSQL() 
{ 
CMYApp *pApp = ((CMYApp *)AfxGetApp()); 
if (pApp->pGUIThread == AfxGetThread()) 
{ 
return CDaoRecordset::GetSQL(); 
} 
else 
{ 
return (CString)*(CString *)AfxGetMainWnd()-> 
SendMessage(WM_MULTIDAOMESSAGE, MultiDaoGetSQL, (LPARAM)this); 
} 
} 

COleVariant CMultiDaoRecordSet::GetLastModifiedBookmark() 
{ 
CMYApp *pApp = ((CMYApp *)AfxGetApp()); 
if (pApp->pGUIThread == AfxGetThread()) 
{ 
return CDaoRecordset::GetLastModifiedBookmark(); 
} 
else 
{ 
return (COleVariant)AfxGetMainWnd()-> 
SendMessage(WM_MULTIDAOMESSAGE, MultiDaoGetLastModifiedBookmark, (LPARAM)this); 
} 
} 

long CMultiDaoRecordSet::GetRecordCount() 
{ 
CMYApp *pApp = ((CMYApp *)AfxGetApp()); 
if (pApp->pGUIThread == AfxGetThread()) 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美人动与zoxxxx乱| 天堂在线一区二区| 国产精品久久久久久久久久免费看| 国产三级三级三级精品8ⅰ区| 久久婷婷久久一区二区三区| 久久精品一区蜜桃臀影院| 亚洲欧洲精品一区二区三区不卡| 亚洲综合区在线| 香蕉加勒比综合久久| 蜜桃在线一区二区三区| 国产成人综合自拍| 欧美日本免费一区二区三区| 精品三级在线观看| 樱花草国产18久久久久| 久久国产精品免费| 成人av电影在线观看| 欧美一区二区在线观看| 综合电影一区二区三区 | 国产91丝袜在线观看| 色妞www精品视频| 久久久久一区二区三区四区| 亚洲最大的成人av| 成人的网站免费观看| 日韩一二三区不卡| 午夜久久电影网| 在线观看免费亚洲| 亚洲日本va午夜在线电影| 国产美女一区二区| 26uuu国产电影一区二区| 秋霞成人午夜伦在线观看| 欧美日本精品一区二区三区| 亚洲男女毛片无遮挡| 9i在线看片成人免费| 欧美日韩视频在线第一区 | 日韩福利电影在线| 国产又粗又猛又爽又黄91精品| 石原莉奈在线亚洲三区| 国产乱一区二区| 色狠狠色狠狠综合| 欧美专区在线观看一区| 成人免费在线视频| 高清久久久久久| 国精产品一区一区三区mba视频 | 亚洲欧洲99久久| 色偷偷久久一区二区三区| 欧美一区二区三区精品| 亚洲欧洲成人精品av97| 国产一区二区三区四区在线观看| 在线视频国内自拍亚洲视频| 日韩欧美高清在线| 夜夜嗨av一区二区三区四季av| 亚洲国产一区二区三区青草影视| av电影天堂一区二区在线观看| 久久久一区二区三区捆绑**| 北条麻妃一区二区三区| 精品精品国产高清a毛片牛牛| 亚洲欧美在线视频| 欧美视频你懂的| 日韩成人免费看| 欧美日韩午夜在线| 99久久99久久综合| 亚洲成av人片观看| 2024国产精品| 欧美在线短视频| gogo大胆日本视频一区| 国产精品免费观看视频| 精品婷婷伊人一区三区三| 国产精品一线二线三线精华| 亚洲综合成人在线视频| 国产区在线观看成人精品 | 91高清在线观看| 视频在线观看一区二区三区| 三级不卡在线观看| 国内精品伊人久久久久av影院| 成人一区二区三区视频 | 色天天综合色天天久久| 国产精品影视在线观看| 久久精品99久久久| 久久超级碰视频| 免费av网站大全久久| 麻豆国产91在线播放| 美女视频免费一区| 免费观看日韩电影| 日韩欧美你懂的| 国产精品麻豆99久久久久久| 国产亚洲短视频| 久久久噜噜噜久久中文字幕色伊伊 | 午夜精品视频一区| 亚洲va国产va欧美va观看| 轻轻草成人在线| 国产在线播放一区| av在线播放成人| 欧美三级三级三级爽爽爽| 欧美婷婷六月丁香综合色| 日韩欧美你懂的| 国产精品高潮久久久久无| 亚洲一区二区欧美| 成人国产精品免费观看动漫| 国产精品18久久久久久vr| 成人综合在线观看| 欧美中文一区二区三区| 精品成人一区二区| 国产精品护士白丝一区av| 亚洲最大成人网4388xx| 韩国精品久久久| 最近中文字幕一区二区三区| 亚洲欧洲一区二区在线播放| 天天色图综合网| 成av人片一区二区| 精品三级av在线| 亚洲一区中文日韩| 麻豆视频观看网址久久| 色天天综合色天天久久| 欧美mv日韩mv国产网站| 亚洲国产一区二区三区| 成人免费视频播放| 久久一区二区三区国产精品| 热久久国产精品| 欧美亚洲综合色| 最新不卡av在线| 99久精品国产| 亚洲裸体xxx| 9人人澡人人爽人人精品| 久久伊人蜜桃av一区二区| 美女在线一区二区| 日韩精品一区二区三区三区免费| 天天综合日日夜夜精品| 欧美日本一区二区三区| 午夜婷婷国产麻豆精品| 欧美一区二区三区在| 日本不卡中文字幕| 久久综合色鬼综合色| 国产一区二区三区久久久| 精品乱人伦小说| 成人国产电影网| 一区二区三区精品久久久| 欧美性色综合网| 蜜臀av一区二区三区| 久久一区二区视频| 97se狠狠狠综合亚洲狠狠| 一区二区国产视频| 欧美成人三级电影在线| 白白色 亚洲乱淫| 亚洲一区视频在线| 久久久国产精品麻豆| 91久久人澡人人添人人爽欧美| 天使萌一区二区三区免费观看| 久久影音资源网| 欧美三片在线视频观看| 国产精品亚洲第一区在线暖暖韩国 | 国产自产视频一区二区三区| 日本一区二区三区四区在线视频 | 日韩激情在线观看| 久久综合狠狠综合久久综合88| 色94色欧美sute亚洲线路一久| 青青草国产精品97视觉盛宴| 国产精品久久久爽爽爽麻豆色哟哟 | 久久亚区不卡日本| 欧美亚洲禁片免费| 99视频精品在线| 国产一区二区不卡老阿姨| 日韩国产精品久久久久久亚洲| 最新国产の精品合集bt伙计| 国产日韩三级在线| 亚洲精品在线电影| 精品日韩欧美在线| 欧美一级片免费看| 欧美日本乱大交xxxxx| 欧美探花视频资源| 欧洲精品在线观看| 欧美丝袜第三区| 欧美最猛性xxxxx直播| 欧美影视一区在线| 欧美男女性生活在线直播观看| 色综合久久久久| 欧美综合色免费| 日韩午夜av电影| 日韩欧美中文字幕制服| 欧美成人一区二区三区在线观看| 日韩区在线观看| 国产色综合久久| 中文字幕一区av| 日韩高清在线不卡| 免费高清在线视频一区·| 紧缚奴在线一区二区三区| 国产成人av福利| 欧美性视频一区二区三区| 欧美一级理论片| 欧美激情自拍偷拍| 亚洲bt欧美bt精品777| 国产中文一区二区三区| 91性感美女视频| 欧美一区二区三区白人| 国产精品久久一卡二卡| 日本成人在线不卡视频| av成人免费在线| 日韩欧美卡一卡二| 亚洲一区二区影院| 国产成人午夜精品影院观看视频 | 97精品久久久久中文字幕 |