MFC 类内线程函数
线程函数必须是全局函数或静态成员函数。
非静态成员函数都有一个隐含的参数用于接收所属类的this指针,一般情况下调用时参数不匹配。所以static可以干掉隐含的参数。
但是没有了this,类内的函数就无法调用了。所以AfxBeginThread(线程函数,(LPVOID)this),this又回来了,这样可以调用啦。
CWinThread* AFXAPI AfxBeginThread(
AFX_THREADPROC pfnThreadProc, //线程的入口函数,声明一定要如下: UINT MyThreadFunction( LPVOID pParam );
LPVOID pParam, //线程参数
int nPriority,
UINT nStackSize,
DWORD dwCreateFlags,
LPSECURITY_ATTRIBUTES lpSecurityAttrs)
【案例】
//头文件中声明 static UINT MyThreadFunction(LPVOID pParam);//定义线程入口函数 UINT CMFCApplication25Dlg::MyThreadFunction(LPVOID pParam)//线程入口函数,具体实现 { CMFCApplication25Dlg* dlg = (CMFCApplication25Dlg*)pParam;//this赋给dlg for (int i = 0; i <= 100; i++) { dlg->SetDlgItemInt(IDC_STATIC, i, false);//通过类的对象来操作 Sleep(100); } return 0; } void CMFCApplication25Dlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 AfxBeginThread(MyThreadFunction, (LPVOID)this);//this赋给线程入口函数的参数pParam }
【参考】