多线程管理类

豆豆网   技术应用频道   2008年01月14日  【字号: 收藏本文

内容摘要:如果用AfxBeginThread,那必须定个全局函数,或者写个静态函数,一般是传个this指针进去,然后再用这个指针调用本类函数的成员函数,用起来比较麻烦,现在问题是能不能不用全局或者静态函数来实现呢,于是我实现了这个类,来所简化多线程的创建和关闭的操作。

class CMulThreadDlg : public CDialog,private CYGMulThread
{
// Construction
public:
  CMulThreadDlg(CWnd* pParent = NULL);  // standard constructor
  void ReleaseShow2();
  void ReleaseShow();
  void ThreadFunc();
// Dialog Data
  //{{AFX_DATA(CMulThreadDlg)
  enum { IDD = IDD_MULTHREAD_DIALOG };
  CYGEdit  m_edShow;
  //}}AFX_DATA
  // ClassWizard generated virtual function overrides
  //{{AFX_VIRTUAL(CMulThreadDlg)
  protected:
  virtual void DoDataExchange(CDataExchange* pDX);  // DDX/DDV support
  //}}AFX_VIRTUAL
// Implementation
protected:
  HICON m_hIcon;
  // Generated message map functions
  //{{AFX_MSG(CMulThreadDlg)
  virtual BOOL OnInitDialog();
  afx_msg void OnPaint();
  afx_msg HCURSOR OnQueryDragIcon();
  afx_msg void OnBtnDebug();
  afx_msg void OnBtnStop();
  afx_msg void OnBtnTest1();
  afx_msg void OnBtnTest2();
  //}}AFX_MSG
  DECLARE_MESSAGE_MAP()
};

  这里要注意两个地方:

  1.CYGMulThread的模板是用被派生出来的类,这里的好处,就是可以使CYGMulThread可以使用被派生出来的东西,至于还有什么好处,有兴趣的朋友可以看一下ATL和WTL里的代码,里面大量使用这种结构。

  2.这里用的私有继承,当然也可以用公用继承:),个人觉得这样私有继承,数据封装性好一点。

来源:vckbase    作者:谭永光    责编:豆豆技术应用

正在加载评论...