在静态成员函数创建线程失败,如何解决

在静态成员函数创建线程失败,怎么解决?


   在静态成员函数创建线程,AfxBeginThread(XYZ_Move_thread,this); //用this报错

    看到网上说:将this改为p
    CProjectSWView   *Mdlg=(CProjectSWView*)p; 
    AfxBeginThread(XYZ_Move_thread, p);
    
    调试时,显示0xcdcdcdcd,无效 

    谁写过类似的代码,给个方法吧?谢谢!


------最佳解决方案--------------------
引用:
 to VisualEleven:
 你能写出大概的具体代码吗? "参数你可以传递一个全局的类指针变量"不知道具体是什么

 什么转换
 (Mdlg->pXYZThread)=AfxBeginThread(XYZ_Move_thread,p);//参2 p 换成什么?

 谢谢!(网上搜不到方法)

你先定义一个静态或者全局的类指针变量,在合适的地方初始化它,AfxBeginThread创建线程的时候将这个静态或者全局的指针作为线程函数的参数传递过去即可。
------其他解决方案--------------------
今天帮你写了个,
 全局或静态CProjectSWView* Mdlg;
在InitialDialog里初始化:
Mdlg=this(要是不放心的话用Mdlg=(CProjectSWView*)AfxGetMainWnd())
然后将Mdlg传进去就行了。我这边是可以编译通过和运行的。
------其他解决方案--------------------
本帖最后由 VisualEleven 于 2012-09-07 17:29:12 编辑 普通成员函数中创建线程使用用this肯定是可以的。


------其他解决方案--------------------


   在静态成员函数里创建线程,静态static.
------其他解决方案--------------------
静态成员函数里面没有 this 指针的,你要从外部获取对象的地址的
------其他解决方案--------------------
静态成员函数不属于任何对象实例,所以用this不对吧,可以定义一个静态的对象指针
------其他解决方案--------------------

  To feilongjilei,w654637923
  这样说太抽象了,可以给出具体的代码吗?谢谢
------其他解决方案--------------------


 没有人在多线程中遇到这个问题吗?
------其他解决方案--------------------
我记错了,afxbeginthread不是静态函数,可以调用当前对象实例,你应该是其他地方错了,比如线程函数,定义对了么,是否为static
------其他解决方案--------------------
你能多贴一点关键代码么
------其他解决方案--------------------
我的博客
------其他解决方案--------------------
引用:
  在静态成员函数创建线程,AfxBeginThread(XYZ_Move_thread,this); //用this报错

  看到网上说:将this改为p
  CProjectSWView *Mdlg=(CProjectSWView*)p; 
  AfxBeginThread(XYZ_Move_thread, p);
   
  调试时,显示0xcdcdcdcd,无效 

  ……

Sorry,类的静态成员函数中不带this指针的。你再静态函数中创建线程,参数你可以传递一个全局的类指针变量
------其他解决方案--------------------
搽,我都看错了,第一次看到了这一句“在静态成员函数创建线程”,第二次又没看到,还是原来的观点.

------其他解决方案--------------------

 to VisualEleven:
 你能写出大概的具体代码吗? "参数你可以传递一个全局的类指针变量"不知道具体是什么

 什么转换
 (Mdlg->pXYZThread)=AfxBeginThread(XYZ_Move_thread,p);//参2 p 换成什么?

 谢谢!(网上搜不到方法)
------其他解决方案--------------------
在类外创建一个结构体
struct MDLG
{
   static CProjectSWView *Mdlg;
};
在你创建线程的静态函数里初始化

------其他解决方案--------------------