线程函数应定义在类的内部还是外部?若在外部,则不能使用类的数据。如何是好?
AfxBeginThread 函数的参数按照资料上的写法:AfxBeginThread(CThreadProc,GetSafeHwnd());
编译时出现如下错误:
 error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (void *)'

解决方案 »

  1.   

    当然是内部,外部你的程序如何写?CWinThread* AfxBeginThread(
       AFX_THREADPROC pfnThreadProc,
       LPVOID pParam,
       int nPriority = THREAD_PRIORITY_NORMAL,
       UINT nStackSize = 0,
       DWORD dwCreateFlags = 0,
       LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL 
    );第一个参数错误,正确地为:UINT MyControllingFunction( LPVOID pParam );
      

  2.   

    你可以定义一个静态成员函数作为线程函数,来避免c++的this指针问题。
      

  3.   

    //FThread.h 头文件
    #pragma onceclass FThread
    {
    public:
    FThread(void);
    ~FThread(void); HANDLE CreateThread();
    virtual DWORD ThreadProc(); DWORD m_dwThreadID;
    HANDLE m_hThread;
    protected:
    private:
    static DWORD WINAPI Entry(LPVOID lpParam);
    };//FThread.cpp
    #include "stdafx.h"
    #include "Fthread.h"FThread::FThread(void)
    {
    }FThread::~FThread(void)
    {
    }HANDLE FThread::CreateThread ()
    {
    m_hThread=::CreateThread(NULL,0,Entry,this,0,&m_dwThreadID);
    return m_hThread;
    }DWORD FThread::Entry (LPVOID lpParam)
    {
    return ((FThread*)lpParam)->ThreadProc ();
    }DWORD FThread::ThreadProc ()
    {
    return 0;
    }这种方法可以解决你的问题。注意,ThreadProc为虚函数。这样才能保证使用你得载的
    线程函数。