小弟想在类中定义线程函数(已定义为static),可是编译老是出现错误,各位大虾帮忙看看怎么回事:
   在View类的h文件中定义:
   public:
    static DWORD WINAPI FireBurnThread(LPVOID param);   在View类的cpp文件中定义:
   DWORD WINAPI CLearnOpenGL2View::FireBurnThread(LPVOID param)
   {
    return 0;
   }   在View类的某个函数中启动线程:
   HWND hWnd = GetSafeHwnd();
   AfxBeginThread(FireBurnThread, hWnd);   结果编译提示错误:error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned long (void *)'
   
   到底怎么回事啊?

解决方案 »

  1.   

    AfxBeginThread(FireBurnThread, hWnd);改:AfxBeginThread(FireBurnThread, (void*)&hWnd);
      

  2.   

    改成如下形式:
    声明:static UINT FireBurnThread(LPVOID param);
    定义:UINT CLearnOpenGL2View::FireBurnThread(LPVOID param)
      

  3.   

    AfxBeginThread(FireBurnThread, (void*)&hWnd);
    无类型
      

  4.   

    我就搞不懂了,上面说can convert parameter 1 from type 'unsigned long (void *)
    改parameter  2 有什么用?
    我觉得该改成afxbeginthread(( AFX_THREADPROC)FireBurnThread,hWnd)
      

  5.   

    问题出在:
    AfxBeginThread()要求线程函数的返回值类型为UINT(即unsigned int)
    DWORD(是unsigned long)显然不同于UINT,所以提示参数1不能从unsigned long(即DWORD)转换
      

  6.   

    同时,线程函数也不是标准调用函数,WINAPI(即__stdcall)显然通不过
      

  7.   

    AfxBeginThread 函数:
    refer to MSDN:
    CWinThread* AfxBeginThread(
       AFX_THREADPROC pfnThreadProc,
       LPVOID pParam,
       int nPriority = THREAD_PRIORITY_NORMAL,
       UINT nStackSize = 0,
       DWORD dwCreateFlags = 0,
       LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL 
    );
    CWinThread* AfxBeginThread(
       CRuntimeClass* pThreadClass,
       int nPriority = THREAD_PRIORITY_NORMAL,
       UINT nStackSize = 0,
       DWORD dwCreateFlags = 0,
       LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL 
    );你是想用第一个函数~~~~
    但是你第2个参数是hWnd, 可转变为是int型(不是LPVOID),所以引用第2个函数定义...
      

  8.   

    AfxBeginThread的第二个参数应该是个指针,不应该是个句柄
      

  9.   

    多谢各位!
    问题已经解决了:
    h文件中定义:
    static UINT FireBurnThread(LPVOID param);
    cpp文件中定义:
    UINT CLearnOpenGL2View::FireBurnThread(LPVOID param)
    {
    ........
    }
    启动线程:
    AfxBeginThread(FireBurnThread, this);
    编译运行良好!
    结帖