内容摘要:如果用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 作者:谭永光 责编:豆豆技术应用