程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 多線程DAO處理

多線程DAO處理

編輯:關於C語言

 

 

    在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; 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved