UINT FileLoad();
static  UINT  __stdcall FileLoad(LPVOID pParam)
{
   return ((CTsPlayerDlg*)pParam)->FileLoad() ;
}   我写的线程回调函数m_hFileThread= CreateThread(NULL, 0, CTsPlayerDlg::FileLoad, \
this, 0, NULL);
编译不能过去,说什么CreateThread的第三个参数类型不匹配,各位大哥看看这是
怎么回事?

解决方案 »

  1.   

    我建议你不要这样创建线程,虽然可用,但不实用,很容易出错。
    你可以这样创建:
    在头文件中
    public:
        CWinThread *m_ProcessThread;
        static UINT OnProcessThread(LPVOID Param); 
    在cpp文件中
        ...
        m_ProcessThread=AfxBeginThread(OnProcessThread,0,THREAD_PRIORITY_NORMAL,0,0);
        ...
        UINT CTlView::OnProcessThread(LPVOID Param)
        {
        //要回调的函数
        }  
      

  2.   

    LPTHREAD_START_ROUTINE m_hFileThread= CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)CTsPlayerDlg::FileLoad, (LPVOID)this, 0, NULL);
      

  3.   

    UINT FileLoad();
    static  UINT  __stdcall FileLoad(LPVOID pParam)
    {
       return ((CTsPlayerDlg*)pParam)->FileLoad() ;
    }   
    定义错误!!!!
    这样try:
    // file TsPlayerDlg.h
    public:
    UINT CTsPlayerDlg::FileLoad();
    //file TsPlayerDlg.cpp
    static  UINT  __stdcall CTsPlayerDlg::FileLoad(LPVOID pParam)
    {
       return ((CTsPlayerDlg*)pParam)->FileLoad() ;
    }
      

  4.   

    sorry,错了。
    你弄得太乱了。
    要不直接将m_hFileThread= CreateThread(NULL, 0, CTsPlayerDlg::FileLoad, \
    this, 0, NULL);改成:
    m_hFileThread= CreateThread(NULL, 0, FileLoad, \
    this, 0, NULL);
      

  5.   

    而且,你的static  UINT  __stdcall FileLoad(LPVOID pParam)根本就用不着定义为static,
    如果你想用CTsPlayerDlg::FileLoad()函数直接作为线程执行函数的话,你就用我第一次说的方法,不过函数实现的改一下
    static  UINT  __stdcall CTsPlayerDlg::FileLoad(LPVOID pParam)
    {
       //return ((CTsPlayerDlg*)pParam)->FileLoad() ; //这一行得去掉,改成你的函数体
       
    }
      

  6.   

    对第三个参数进行强制类型转换,转换成CreateThread中第三个参数的类型.另外,如果是在类外部创建线程,确保类中作为线程的入口的成员函数是公共类型的.