IDE是vs2010
头文件中包含如下信息:
DWORD WINAPI MyThreadProc1(LPVOID lpParameter);
DWORD WINAPI MyThreadProc2(LPVOID lpParameter);
// CC2_DownloaderDlg dialog
class CC2_DownloaderDlg : public CDialogEx
{
// Construction
public:
CC2_DownloaderDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
enum { IDD = IDD_C2_DOWNLOADER_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
// Implementation
protected:
HICON m_hIcon;
// Generated message map functions
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedButton1();
CListBox l_list;
afx_msg void OnBnClickedButton2();
CEdit Edit1;
CEdit Edit2;
CEdit Edit3;
afx_msg void OnBnClickedRadio13();
afx_msg void OnBnClickedRadio14();
afx_msg void OnBnClickedRadio15();
afx_msg void OnTimer(UINT_PTR nIDEvent);
afx_msg unsigned char Download(unsigned char );
CButton Button2;
// CControlStatic m_static1;
// CControlStatic m_static2;
CListBox m_list;
};
发现cpp文件中线程函数无法操作class CC2_DownloaderDlg中的public成员啊,public不是类的接口么,为何不能访问。vs还是用不习惯啊~
------解决思路----------------------
DWORD WINAPI MyThreadProc1(LPVOID lpParameter)
{
CC2_DownloaderDlg *pDlg = (CC2_DownloaderDlg *)lpParameter;
if(pDlg)
pDlg->xxoo;
//.....
return 0;
}
------解决思路----------------------
1.子线程函数要想访问类的成员函数/成员变量,那么该成员函数/成员变量必须声明为静态static。仅public是不够的,语法问题。
2.如果想把线程函数也申明在类中的话(即作为类成员),那么线程函数应该声明为静态
static UINT MyThreadProc1(LPVOID lpParameter);
------解决思路----------------------
MyThreadProc1 和 MyThreadProc2 这两个函数即使是CC2_DownloaderDlg类的成员函数也不能访问,
线程函数必须是静态的