不懂就问,各位高人会的帮忙回一个,不会的帮忙捧个人场,谢谢.试验成功了一个小的基于对话框辅助线程程序,但对于多线程编程的问题多多,一个一个问:1.AfxBegainThread使用时,参数里边的线程函数为什么不能定义在Dlg类的内部呢?我一声明就报错。“AfxBeginThread” : 2 个重载中没有一个可以转换参数 1(从“UINT (LPVOID)”类型)
       “CWinThread *AfxBeginThread(AFX_THREADPROC,LPVOID,int,UINT,DWORD,LPSECURITY_ATTRIBUTES)”
      “CWinThread *AfxBeginThread(CRuntimeClass *,int,UINT,DWORD,LPSECURITY_ATTRIBUTES)”
        试图匹配参数列表“(overloaded-function, HWND, int)”时
2.线程函数后来查资料不写声明,直接UINT MyThreadProc(LPVOID pParam)写在Dlg.cpp里就编译通过了。
  有的CSDN资料写的“类中的线程函数用静态” ,但我没这么做也可以运行啊,什么情况要用静态的呢?
3.由于2的缘故,在Dlg.cpp里声明的这个没爹没娘的线程函数里,不能使用对话框的控件。
  我想用CWnd * pWnd = AfxGetApp()->GetMainWnd();  pWnd->m_Edit1;的方法,但pWnd无法使用m_Eidt1,根本不能找到.4.  .net下对于AfxBeginThread的使用形式只有以下两种:   “CWinThread *AfxBeginThread(AFX_THREADPROC,LPVOID,int,UINT,DWORD,LPSECURITY_ATTRIBUTES)”
      “CWinThread *AfxBeginThread(CRuntimeClass *,int,UINT,DWORD,LPSECURITY_ATTRIBUTES)”
   
   但一些实例里经常省略一些参数写AfxBeginThread(MyThreadProc,hWnd,THREAD_PRIORITY_NORMAL);
   事实上也能正常运行,但我想知道省略参数的规范格式是什么?
    如果我想使用参数是不是 (1,2,3)而是(1,2,4)省略第3个参数也可以这么排着写3个参数吗?

解决方案 »

  1.   

    1.2 线程函数只能是全局的或者是类里面的static函数
    3, 作为参数传递进去,但是建议你别在线程直接操作,可以在线程里发消息
      

  2.   

    1/2应该是static的成员函数,或全局函数。
    UINT MyControllingFunction( LPVOID pParam );
    3.CWnd不是线程安全的,不建议这么用。
    如果我想使用参数是不是 (1,2,3)而是(1,2,4)省略第3个参数也可以这么排着写3个参数吗?
    ????不可能,只能省略后面的缺省参数。