如何使用CreateThread()或AfxBeginThread()调用作为类成员函数的线程函数?求教。

解决方案 »

  1.   

    我试过将线程函数声明为static,但又无法访问成员变量。
      

  2.   

    哦,明白了。一时竟忘了this指针。
      

  3.   

    俺一般声明 友元函数
    unsigned long __stdcall MyDispatchFunc(LPVOID lpParam)
    {
        MyClassConsole * pCC = (MyClassConsole*)lpParam;
    return pCC->StillThreadProcess();
    }class  MyClassConsole  
    {
    public:
       MyClassConsole(); 
       virtual ~MyClassConsole();
       friend unsigned long __stdcall MyDispatchFunc(LPVOID lpParam); 
    private:
       UINT StillThreadProcess(void);
    private:
       UINT     m_nThreadID;
    public:
        BOOL Start(void);
        BOOL Stop(void);
    };void MyClassConsole::Run()
    {  ::CreateThread(NULL,
                     0,
    BSocketConsoleDispatchFunc,
    (LPVOID)this,
    0,//CREATE_SUSPENDED,
    (unsigned long*)&m_nThreadID);
    }
      

  4.   

    写错了字
    俺一般声明 友元函数
    unsigned long __stdcall MyDispatchFunc(LPVOID lpParam)
    {
        MyClassConsole * pCC = (MyClassConsole*)lpParam;
    return pCC->StillThreadProcess();
    }class  MyClassConsole  
    {
    public:
       MyClassConsole(); 
       virtual ~MyClassConsole();
       friend unsigned long __stdcall MyDispatchFunc(LPVOID lpParam); 
    private:
       UINT StillThreadProcess(void);
    private:
       UINT     m_nThreadID;
    public:
        BOOL Start(void);
        BOOL Stop(void);
    };void MyClassConsole::Run()
    {  ::CreateThread(NULL,
                     0,
    MyDispatchFunc,//更正!!!!!
    (LPVOID)this,
    0,//CREATE_SUSPENDED,
    (unsigned long*)&m_nThreadID);
    }
      

  5.   

    又错了void MyClassConsole::Strat()
    {  ::CreateThread(NULL,
                     0,
    MyDispatchFunc,//更正!!!!!
    (LPVOID)this,
    0,//CREATE_SUSPENDED,
    (unsigned long*)&m_nThreadID);
    }