+ -
当前位置:首页 → 问答吧 → linux c++ 多线程 问题

linux c++ 多线程 问题

时间:2011-11-09

来源:互联网

c++ 类中使用多线程传递this指针后调用this指针出错,不调用线程能正常运行,求高手指导,如下:

我定义了一个 MClass类
///MClass.h文件
void createPthread();
static void * fun(void * p);

///MClass.cpp文件
void MClass::createPthread()
{
 phread_create(&pt,NULL,MClass::fun,(void *)this):

}

static void * MClass::fun(void * p)
{
  while(1)
  {
  //(MClass *)p->showdata; 这里注释掉线程可以运行, cout<<"rrrrrrrrrrr";
  sleep(1);
  }
}


///main文件
void main()
{
  MClass mclass;
  mclass.createPthread();
}
 

注:不用指针引用其他成员函数能正常运行,反之运行到引用的地方就出错,我把传进去前的this指针后传进去后的this打印出来,值时一样的。对C++的机制很不清楚,指导的时候不要见笑。

作者: gcclife   发布时间: 2011-11-09

提交时显示有点问题,更改一下 
//(MClass *)p->showdata; 这里注释掉线程可以运行, cout<<"rrrrrrrrrrr";

作者: gcclife   发布时间: 2011-11-09

颜色标注后下面一行跳上来了,cout<<"rrrrrrrrrrr"; 在注释行下面一行,蛋疼
//(MClass *)p->showdata; 这里注释掉线程可以运行,  
cout<<"rrrrrrrrrrr";

作者: gcclife   发布时间: 2011-11-09

线程数据是stack上 ,估计已经被释放了。

这是常见错误吧。 给 phread_create 这类函数传递数据应该使用 heap或者全局数据。除非你保证这些数据在使用的时候可用。

作者: yanghuajia   发布时间: 2011-11-09