当前位置: 技术问答>linux和unix
请教:关于C++类中方法线程调用的问题。
来源: 互联网 发布时间:2016-03-07
本文导语: 大家好。 请问一下,在C++的一个类中,它的一个方法能作为线程调用吗?我自己写了一个,好像不行,是我写错了还是就不可以啊? 可是如果把这个方法定义成static,就可以作为线程调用了。 再就是,如果把这个sta...
大家好。
请问一下,在C++的一个类中,它的一个方法能作为线程调用吗?我自己写了一个,好像不行,是我写错了还是就不可以啊?
可是如果把这个方法定义成static,就可以作为线程调用了。
再就是,如果把这个static方法作为线程调用的时候,这个方法又调用了这个类的一个对象中的数据成员,在这个对象析构后而这个线程没有退出的话会不会出问题啊?我自己写了个代码好像没有问题。还可以继续调用这个对象的数据成员,请高手指教。
谢谢!
#include
#include
#include
#include
#include
using namespace std;
class test
{
public:
int i;
test();
~test();
bool startPthread();
private:
static void *print(void * thisobj);
};
test::test()
{
}
test::~test()
{
}
bool test::startPthread()
{
pthread_t tid;
pthread_attr_t attr;
int ret;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
pthread_attr_setscope(&attr,PTHREAD_SCOPE_SYSTEM);
ret = pthread_create(&tid,&attr,&(test::print),(void*)this);
pthread_attr_destroy(&attr);
if(!ret)
{
return true;
}
return false;
}
void * test::print(void * thisobj)
{
test *ptest = (test*)thisobj;
int j;
j = 0;
for(;;)
{
j++;
cout
请问一下,在C++的一个类中,它的一个方法能作为线程调用吗?我自己写了一个,好像不行,是我写错了还是就不可以啊?
可是如果把这个方法定义成static,就可以作为线程调用了。
再就是,如果把这个static方法作为线程调用的时候,这个方法又调用了这个类的一个对象中的数据成员,在这个对象析构后而这个线程没有退出的话会不会出问题啊?我自己写了个代码好像没有问题。还可以继续调用这个对象的数据成员,请高手指教。
谢谢!
#include
#include
#include
#include
#include
using namespace std;
class test
{
public:
int i;
test();
~test();
bool startPthread();
private:
static void *print(void * thisobj);
};
test::test()
{
}
test::~test()
{
}
bool test::startPthread()
{
pthread_t tid;
pthread_attr_t attr;
int ret;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
pthread_attr_setscope(&attr,PTHREAD_SCOPE_SYSTEM);
ret = pthread_create(&tid,&attr,&(test::print),(void*)this);
pthread_attr_destroy(&attr);
if(!ret)
{
return true;
}
return false;
}
void * test::print(void * thisobj)
{
test *ptest = (test*)thisobj;
int j;
j = 0;
for(;;)
{
j++;
cout