是不是可以这么用啊:
UINT FunAThread(LPVOID lpPara)
{
ClassA *pClass=(ClassA *)lpPara;
pClass->FunA();
//如果要访问ClassA的变量可以
pClass->m_...
return 0L;
} void TestTunc()
{
AfxBeginThread(FunAThread,&m_a);
}
UINT FunAThread(LPVOID lpPara)
{
ClassA *pClass=(ClassA *)lpPara;
pClass->FunA();
//如果要访问ClassA的变量可以
pClass->m_...
return 0L;
} void TestTunc()
{
AfxBeginThread(FunAThread,&m_a);
}
不知你这样做的目的,如果想让一个线程访问ClassA的成员变量的话,可以把线程函数说明为ClassA的friend。
线程函数一定是这样的格式:
UINT ThreadFun(LPVOID pParam);
不过你这个应该可能这样写:
线程函数:
UINT ThreadFun(LPVOID pParam)
{
ClassA* a;a=(ClassA*)pParam;
a.FunA();
}//记得要包含ClassA的头文件,要不然会说ClassA没定义开线程时这样调用:
AfxBeginThread(ThreadFun,&m_a);
而且,好像UINT ThreadFun(LPVOID pParam)不能是别人的成员函数。
因为我试过,好像不行它老说什么参数错误。后来我换成在外面单独的
头文件和cpp文件里定义就行了
调用时记得把该头文件包含进去
class CMutiThread : public CWinThread
{
DECLARE_DYNCREATE(CMutiThread)
protected:
CMutiThread(); // protected constructor used by dynamic creation// Attributes
public:// Operations
public:
CWinPopupDlg *m_pOwner;
void SetOwner(CWinPopupDlg *Owner){m_pOwner=Owner;} void SetExit(){m_iExit=EXIT;}
private:
int m_iExit;
public:// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMutiThread)
public:
virtual BOOL InitInstance();
virtual int ExitInstance();
virtual int Run();
//}}AFX_VIRTUAL// Implementation
protected:
virtual ~CMutiThread(); // Generated message map functions
//{{AFX_MSG(CMutiThread)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG DECLARE_MESSAGE_MAP()
};
int CMutiThread::Run()
{
// TODO: Add your specialized code here and/or call the base class
GetNeiborhood();
//通知DLG网上邻居搜索完毕,可以添加到下拉框中了
m_pOwner->PostMessage(WM_NEIBORHOOD_FOUND,0,0); while(!m_iExit)
{
GetNeiborhoodIP();
Sleep(10);
}
return 0;//CWinThread::Run();
}