是不是可以这么用啊:
  UINT FunAThread(LPVOID lpPara)
  {
       ClassA *pClass=(ClassA *)lpPara;
       pClass->FunA();
       //如果要访问ClassA的变量可以
       pClass->m_...
       return 0L;     
  }  void TestTunc()
  {
     AfxBeginThread(FunAThread,&m_a);
     
  }

解决方案 »

  1.   

    静态的应该可以,但是不能访问m_a的成员变量。
    不知你这样做的目的,如果想让一个线程访问ClassA的成员变量的话,可以把线程函数说明为ClassA的friend。
      

  2.   

    直接作为线程函数可能不行
    线程函数一定是这样的格式:
    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文件里定义就行了
    调用时记得把该头文件包含进去
      

  3.   

    用了CreateThread是不是还要调用其它的结束线程的函数?当线程函数退出后线程是不是就自己结束了?
      

  4.   

    我试了一下,FunA可以作为线程执行,也可以访问m_a的成员变量。我跟追进FunA(),一直到它执行完,都没有错误,但退出一会就出现非法操作了。不知道是不是因为FunA()的参数没有按照线程函数的格式来设置的原因。
      

  5.   

    刚才弄错了,我在CreateThread写参数时吧FunA写成FunA()了,所以以为可以作为线程打开。但实际上不行,写为FunA后编译都通不过。
      

  6.   

    可以了,就是按照 y_may(witch)和lvfengxun(lfx)说的方法。谢谢大家!
      

  7.   

    我从CWinThread派生线程类
    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();
    }