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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

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

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

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

class CMySet : public CMultiDaoRecordSet

在相應(yīng)的CPP文件中也應(yīng)該改一下:

IMPLEMENT_DYNAMIC(CMySet, CMultiDaoRecordSet)

CMySet::CMySet (CDaoDatabase* pdb) : CMultiDaoRecordSet(pdb) 
為了處理接受到的WM_MULTIDAOMESSAGE消息,下面的代碼還應(yīng)該加在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; 
} 

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

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


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

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

加在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()) 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品亚洲人在线观看| 又紧又大又爽精品一区二区| 久久久久国色av免费看影院| 午夜婷婷国产麻豆精品| 欧美四级电影在线观看| 亚洲精品一区二区三区在线观看| 日韩一区在线播放| 日本美女一区二区三区视频| 成人动漫在线一区| 欧美电视剧在线观看完整版| 亚洲欧美电影院| 国产精品99久久不卡二区| 3atv在线一区二区三区| 亚洲欧美一区二区三区久本道91| 韩国女主播成人在线观看| 欧美日韩三级一区| 亚洲精品五月天| 成人激情免费视频| 久久久久久久av麻豆果冻| 免费一区二区视频| 欧美日韩国产影片| 一区二区三区精品视频在线| 成人福利视频在线| 中文字幕一区视频| 成人免费电影视频| 久久精品视频免费观看| 国产在线精品一区在线观看麻豆| 日韩午夜激情视频| 美女久久久精品| 91麻豆精品国产91久久久久久| 亚洲成精国产精品女| 在线免费不卡视频| 亚洲一区二区五区| 欧美日韩亚洲综合一区二区三区| 一区二区三区不卡视频在线观看| 91麻豆免费看| 亚洲精品高清在线观看| 欧美日韩国产系列| 视频一区在线播放| 777午夜精品视频在线播放| 亚瑟在线精品视频| 91精品国产色综合久久ai换脸 | 中文字幕不卡三区| 成人性生交大片免费看在线播放 | 欧美一级片免费看| 久久精品国产亚洲高清剧情介绍| 欧美一级日韩一级| 国产激情视频一区二区在线观看| 亚洲国产精品成人综合| 91网站黄www| 亚洲国产sm捆绑调教视频| 欧美福利视频一区| 久久国产精品99久久久久久老狼| 久久综合九色综合欧美就去吻| 国产乱子伦一区二区三区国色天香| 久久日韩粉嫩一区二区三区| 成人精品国产免费网站| 亚洲影视在线播放| 日韩精品资源二区在线| 风间由美一区二区av101| 亚洲欧美日韩国产另类专区| 88在线观看91蜜桃国自产| 国产米奇在线777精品观看| 亚洲视频小说图片| 欧美一级国产精品| 国产宾馆实践打屁股91| 亚洲欧美国产77777| 日韩一区二区三区免费看| 国产毛片精品一区| 亚洲精选一二三| 久久亚洲捆绑美女| 色8久久人人97超碰香蕉987| 男人操女人的视频在线观看欧美| 国产女人18毛片水真多成人如厕 | 亚洲激情一二三区| 日韩精品一区二区在线| 成人av网址在线观看| 男人的天堂亚洲一区| 亚洲日本va午夜在线影院| 日韩视频在线观看一区二区| 99re亚洲国产精品| 麻豆精品蜜桃视频网站| 亚洲男人的天堂av| 久久久天堂av| 欧美丰满少妇xxxxx高潮对白 | 激情五月婷婷综合| 亚洲狠狠丁香婷婷综合久久久| 久久先锋影音av鲁色资源网| 在线观看视频一区二区欧美日韩| 国产白丝精品91爽爽久久| 蜜臀av一区二区三区| 亚洲自拍偷拍欧美| 国产精品视频在线看| 日韩精品专区在线| 欧美午夜在线观看| 99国产精品久久久久久久久久久| 久久不见久久见免费视频7| 亚洲电影你懂得| 亚洲丝袜另类动漫二区| 久久久久99精品国产片| 日韩免费观看2025年上映的电影| 91成人看片片| 色美美综合视频| 成人黄色电影在线| 懂色av一区二区三区蜜臀| 久久草av在线| 九色porny丨国产精品| 日本伊人色综合网| 亚洲高清免费一级二级三级| 一区二区三区中文在线观看| 综合久久给合久久狠狠狠97色| 亚洲国产精品精华液ab| 国产欧美日韩综合精品一区二区| 五月婷婷激情综合| 91福利国产精品| 91丨porny丨中文| 成人黄色av网站在线| 成人av在线播放网站| 成人一道本在线| 粉嫩aⅴ一区二区三区四区| 国产69精品一区二区亚洲孕妇| 粉嫩一区二区三区在线看| 成人综合日日夜夜| 波多野结衣中文字幕一区二区三区| 国产成人在线视频网址| 国产a级毛片一区| 99久久综合狠狠综合久久| 91色九色蝌蚪| 在线观看日韩高清av| 精品视频免费在线| 91精品一区二区三区久久久久久| 欧美精品日韩精品| 日韩美女主播在线视频一区二区三区 | 99久久精品情趣| 色哟哟一区二区三区| 欧美午夜免费电影| 7777精品伊人久久久大香线蕉的| 国产色产综合产在线视频| 国产高清精品久久久久| 韩国v欧美v日本v亚洲v| 国产成人免费视频| aa级大片欧美| 欧美午夜免费电影| 日韩一级片在线观看| 久久精品人人爽人人爽| 日韩毛片一二三区| 日韩黄色小视频| 国产精品一区二区黑丝| 色婷婷激情久久| 日韩欧美一二三区| 国产精品国产三级国产aⅴ入口 | 一区二区三区四区精品在线视频| 亚洲成人777| 国产1区2区3区精品美女| 94色蜜桃网一区二区三区| 欧美丰满一区二区免费视频| 中文字幕精品—区二区四季| 亚洲妇女屁股眼交7| 国产在线一区二区| 在线精品视频一区二区三四| 精品国产一区二区三区不卡| 尤物视频一区二区| 精品一区二区三区在线播放视频| 99国产精品久久久久久久久久 | 美女性感视频久久| 99久久精品费精品国产一区二区| 日韩精品一区二区三区视频播放 | 久国产精品韩国三级视频| 制服.丝袜.亚洲.中文.综合| 日韩伦理电影网| 国产在线麻豆精品观看| 欧美福利电影网| 亚洲精品成人精品456| 国产伦精品一区二区三区在线观看| 欧美性受xxxx黑人xyx| 欧美激情一区二区在线| 麻豆精品视频在线观看免费| 色999日韩国产欧美一区二区| 国产欧美一区二区精品婷婷| 精品一区二区久久久| 欧美日韩国产一级片| 亚洲私人黄色宅男| 成人午夜av电影| 久久先锋资源网| 久久99国产精品成人| 欧美日本视频在线| 一区二区三区国产精品| 懂色av一区二区在线播放| 26uuu欧美日本| 国产在线精品免费| 欧美刺激午夜性久久久久久久| 性久久久久久久久久久久| 91福利视频在线| 亚洲人成小说网站色在线 | 在线一区二区三区四区五区| 国产精品久久久久久久第一福利| 成人永久aaa| 亚洲成人tv网| 91在线一区二区三区| 久久影音资源网|