请教高手们个问题。关于创建多线程和this指针使用。

时间:2022-09-27 18:22:41

声明如下:

class mycla
{
 public :
    int StartThread();
 protect :
    friend void* do_working(void *p);

   //数据成员
}

定义如下:
void* do_working(void *p)
{
    mycla *ctmp = (mycla *)p;
    if(NULL == ctmp)
    {
      return ;
    }

    //业务处理

    return ;
}

int mycla::StartThread()
{
int liRetValue = 0;

liRetValue = pthread_create(&m_nThreadID, NULL, do_working, (void*)this);
if (liRetValue != 0)
{
            return -1;
         }
      return 0;
}

在使用的时候发现
do_working 里面的*p的类的数据成员已经为空,没有值,为啥了?

5 个解决方案

#1


对象已经析构了呗
mycla对象改为new

#2


class mycla
{
 public :
    int StartThread();
 private:
    static void* do_working(void *p);

   //数据成员
}

定义如下:
void* mycla::do_working(void *p)
{
    mycla *ctmp = (mycla *)p;
    if(NULL == ctmp)
    {
      return ;
    }

    //业务处理

    return ;
}

int mycla::StartThread()
{
int liRetValue = 0;

liRetValue = pthread_create(&m_nThreadID, NULL, do_working, (void*)this);
if (liRetValue != 0)
{
            return -1;
         }
      return 0;
}


额,没看出来,改成这样是否可行?

#3


你把调用的代码贴出来就清晰了。  帮你的人也就多了。

#4


你应当贴出调用处的代码

#5


pthread_create  这个函数是否用错?

#1


对象已经析构了呗
mycla对象改为new

#2


class mycla
{
 public :
    int StartThread();
 private:
    static void* do_working(void *p);

   //数据成员
}

定义如下:
void* mycla::do_working(void *p)
{
    mycla *ctmp = (mycla *)p;
    if(NULL == ctmp)
    {
      return ;
    }

    //业务处理

    return ;
}

int mycla::StartThread()
{
int liRetValue = 0;

liRetValue = pthread_create(&m_nThreadID, NULL, do_working, (void*)this);
if (liRetValue != 0)
{
            return -1;
         }
      return 0;
}


额,没看出来,改成这样是否可行?

#3


你把调用的代码贴出来就清晰了。  帮你的人也就多了。

#4


你应当贴出调用处的代码

#5


pthread_create  这个函数是否用错?