当前位置:编程学习 > C/C++ >>

多线程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; 

补充:软件开发 , C语言 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,