声明如下:
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
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;
}
额,没看出来,改成这样是否可行?
{
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
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;
}
额,没看出来,改成这样是否可行?
{
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 这个函数是否用错?