MFC下多线程UpdateData的使用方法

  • 在randomDlg.h //定义用户消息,不可与系统消息冲突,所以就这样定义 //WM+USER表示用户消息,加100还是加其他值并没多大区别的 #define WM_MYUPDATEDATA WM_USER+100
  • 在线程内//向主程序框架MainFrm发送消息 //SendMessage第二第三参数可以为其他更多的类型,不局限于此 DWORD RondomLeftThread(CRandomDlg *p) { p->SendMessage(WM_MYUPDATEDATA,FALSE); } //调用线程的地方 hThread_1=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)RondomLeftThread, this, 0, (unsigned long *)&ThreadID);
  • 在randomDlg.cpp内//关联自定义消息 BEGIN_MESSAGE_MAP(CRandomDlg, CDialog) //{{AFX_MSG_MAP(CRandomDlg) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_MESSAGE(WM_MYUPDATEDATA,OnUpdateMyData) //}}AFX_MSG_MAP END_MESSAGE_MAP()
  • 定义OnUpdateMyDataclass CRandomDlg : public CDialog { // Construction public: CRandomDlg(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CRandomDlg) enum { IDD = IDD_RANDOM_DIALOG }; HANDLE hThread_1; HANDLE hThread_2; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CRandomDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: HICON m_hIcon; // Generated message map functions //{{AFX_MSG(CRandomDlg) virtual BOOL OnInitDialog(); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); LRESULT OnUpdateMyData(WPARAM wParam, LPARAM lParam); //}}AFX_MSG DECLARE_MESSAGE_MAP() public: void EnableDisplay(int,BOOL); };
  • 实现OnUpdateMyDataLRESULT CRandomDlg::OnUpdateMyData(WPARAM wParam, LPARAM lParam) { UpdateData(wParam); return 1; }

你可能感兴趣的:(MFC下多线程UpdateData的使用方法)