设为首页 加入收藏

TOP

多线程DAO处理
2014-11-23 20:00:34 来源: 作者: 【 】 浏览:15
Tags:线程 DAO 处理

在DAO多线程处理中,有许多局限性,所以我设计了这么一个类,通过GUI线程来使用DAO的强制调用。在类中使用了GUI的消息队列,所有进入到CMultiDAORecordset的调用都被迫使用AfxGetThread()来检查当前的线程。GUI线程指针是放在InitInstance的首端,如果在GUI线程中,引入的调用请求不在运行,那么CMultiDAORecordSet就会发送一个WM_MULTIDAOMESSAGE消息给AfxGetMainWnd()(在Mainfrm.cpp中)。Mainfrm接受到这个消息,线程也就要再运行一次,这个时候,消息已经接受了,基类CDaoRecordset也就得到了调用。所以你的类是从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;

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇ODBC 中 的 同 步 与 异 步执 行 .. 下一篇基于MFC的大型数据文件处理方法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: