pthread在类中运行私有函数

时间:2013-03-01 10:37:59

标签: c++ class pthreads header-files static-members

我正在编写一个带有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的静态成员,也是一堆其他错误,但这是第一个错误。

我很困惑,因为它被声明为静态:/

pthreadRunpthread_create()

的线程运行函数

我错过了什么?

1 个答案:

答案 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);
}

你应该能够将所有这些函数设为私有/受保护(假设你从这个类中启动线程,我认为最好这样做。