怎样把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)
就编译不过,我想把它作为成员函数,怎么办???不然破坏封装性 ,我还有子类需要
继承呢.
问题点数:20、回复次数:5Top
1 楼freelysay(haha)回复于 2003-11-06 00:23:18 得分 0
把baseClass作为一个functor实现,即重载其()操作符,不知能否符合你的要求。Top
2 楼libad()回复于 2003-11-06 13:57:58 得分 0
具体怎么做呀?我对C++不太熟Top
3 楼defstu(玛瑙石)回复于 2003-11-06 14:06:17 得分 20
把thread_method声明为static的就可以了……Top
4 楼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
Top
5 楼zhukeke(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)
{
...
}
Top




