小众知识

首页 > 正文

怎样把pthread_create的线程函数当作类的成员函数编译通过?

在SOLARIS C++4。2下在一个类的成员里调用了一个线程, 

int baseClass::start() 

................ 
thr_id = pthread_create(&thread_id, NULL, thread_method, NULL); 
........................ 


但必须把thread_method声明如下: 
void *thread_method(void *arg) 

如果声明为void * baseClass::thread_method(void *arg) 
就编译不过,我想把它作为成员函数,怎么办???不然破坏封装性 ,我还有子类需要
继承呢.

 

 freelysay 发表于:2003-11-06 00:23:18
得分:0 

把baseClass作为一个functor实现,即重载其()操作符,不知能否符合你的要求。 

 libad 发表于:2003-11-06 13:57:58
得分:0 

具体怎么做呀?我对C++不太熟 

 defstu 发表于:2003-11-06 14:06:17
得分:20 

把thread_method声明为static的就可以了…… 

 libad 发表于:2003-11-06 15:18:16
得分:0 

class baseClass
{
 static void * thread_method(void * arg);
...
};

static void * thread_method(void * arg)
{
  ...
}

int baseClass::start() 

................ 
thr_id = pthread_create(&thread_id, NULL, thread_method, this); 
........................ 


提示错误为:
ild: (undefined symbol) static baseClass::thread_method(void*) -- referenced in the text segment of ../bin/baseClass.o





 zhukeke 发表于:2003-11-07 17:59:08
得分:0 

class baseClass
{
 static void * thread_method(void * arg);
...
};

static void * thread_method(void * arg) //这里改为:
                                    //void* baseClass::thread_method(void* arg)
{
  ...
}


上一篇:请哪位高手帮我解决一下有关Windows编程的问题吧?
下一篇:关于模板的显式实例化声明的问题

分享到: