UINT ExecutingFunction(LPVOID pParam);-----这是我的线程处理函数
CWinThread myThread = AfxBeginThread(&CMultiThreadDlg::ExecutingFunction,&m_process);-----创建线程函数
但是编译出错Error 1 error C2665: 'AfxBeginThread' : none of the 2 overloads could convert all the argument types如果写成CWinThread myThread = AfxBeginThread(ExecutingFunction,&m_process);
则出错为
Error 1 error C3867: 'CMultiThreadDlg::ExecutingFunction': function call missing argument list; use '&CMultiThreadDlg::ExecutingFunction' to create a pointer to member m_process是一个进度条对象,我用的是vs2005请大家帮我看看怎么解决

解决方案 »

  1.   

    线程函数必须是静态获取全局的函数。UINT ExecutingFunction(LPVOID pParam); //这个函数要么做为全局的,或者static UINT ExecutingFunction(LPVOID pParam);
      

  2.   

    UINT ExecutingFunction(LPVOID pParam);
    是类成员?
    如果是要定义成 static 
      

  3.   

    非常感谢两位的帮忙,我都不知道把分给谁。
    如果谁告诉为什么要申明成static的,或者你们从哪知道要申明成static的我就把分给他
      

  4.   

    要定义成类的静态成员函数,是因为类的静态成员函数不属于某个类对象,这样在调用函数的时候就不用传递一个额外的this指针.
      

  5.   

    在类定义class CMultiThreadDlg {}里面,UINT ExecutingFunction(LPVOID pParam);改为static UINT ExecutingFunction(LPVOID pParam);这样定义,注意:cpp文件中不要加static。这样编译时AfxBeginThread就不会有错了,不过ExecutingFunction函数内部如果访问了类的非静态成员则会抱错。如果要访问了类的非静态成员,你需要在创建线程时把类的指针(this)作为参数传给线程,在线程函数中把pParam强制转换为CMultiThreadDlg*类型,然后用这个指针指向类的非静态成员来访问。
    顺便提一下,结贴的时候不一定要把分都只给某一个人,你可以根据每个人回复的参考价值来评分,所有人的分数总和等于帖子的分数即可。