我正在编写一个带有pthreads的类,带有它的标题和.cpp定义文件。
在.h我有:
class test
{
public:
int a;
...
private:
typedef void (*myfunc)(void *p);
static myfunc pthreadRun;
}
在.cpp中我有:
...
typedef void (*myfunc)(void *p);
myfunc test::pthreadRun
{
this->a = 10;
pthread_exit(NULL);
}
...
我收到错误:void (* test::pthreadRun)(void*)
不是class test
的静态成员,也是一堆其他错误,但这是第一个错误。
我很困惑,因为它被声明为静态:/
pthreadRun
是pthread_create()
我错过了什么?
答案 0 :(得分:1)
很难准确猜出你想要做什么,但首先我想我会像这样重写你的代码:
class test
{
public:
int a;
...
private:
static void pthreadRun(void *p);
}
和
void test::pthreadRun(void *p)
{
// this->a = 10; This line is now a big problem for you.
pthread_exit(NULL);
}
所以这是你正在寻找的那种结构,虽然你不能从这个上下文访问成员元素(例如this-> a),因为它是一个静态函数。
通常,处理此问题的方法是使用this指针启动线程,以便在函数中可以:
void test::pthreadRun(void *p)
{
test thistest=(test)p;
thistest->a=10; //what you wanted
thistest->pthreadRun_memberfunction(); //a wrapped function that can be a member function
pthread_exit(NULL);
}
你应该能够将所有这些函数设为私有/受保护(假设你从这个类中启动线程,我认为最好这样做。