如何让一个方法在新线程中调用同一个类中的另一个方法?

时间:2014-01-07 02:20:06

标签: c++ multithreading class pthreads


我需要在类中调用一个方法在新线程中调用同一个类中的另一个方法,但是遇到了一些麻烦。我得到编译错误:“'这个'不适用于静态成员函数”。我做了一个我的问题的例子,因为我不能在这里发布原始代码。

基本上,发生的事情是我创建了我的类的对象(在下面的例子中称为aClass)然后我调用了一个方法,如do_stuff()do_stuff()方法使用pthread_create在新线程中调用print_number()方法。问题是,当我去编译时,我得到一个错误,说我不能使用this,因为我的print_number()方法是静态的。如果我不将print_number()方法设为静态,则pthread_create会抱怨它不是兼容类型。

我理解为什么我无法在this方法本身中使用print_number(),因为它是静态的,然后可以在没有对象的情况下调用。但是,在我的print_number()方法中,我没有使用this。我正在使用指向我创建的对象的指针。在do_stuff()中,我使用this将对我创建的对象的引用传递给print_number,但我不在this本身使用print_number。所以我不明白这个问题是什么。谢谢你的帮助!

class aClass 
{
    private:
    number;

    public:
    void do_stuff(void);
    static void* print_number(void* arg)    

}

// this method is called first
void aClass::do_stuff()
{
    number = 4;
    pthread_t thread1;
    pthread_create( &thread1, NULL, print_number, this);
    .....
}

//this method is called from the do_stuff() method in a new thread
void* aClass::print_number(void* arg)
{
    aClass* objPTR = (aClass*)arg;
    printf("number = %d", objPTR->number);
}

//don't get caught up here.. the point is that an object is created and
// the "do_stuff()" method is called
int main()
{
    //all the usual stuff here
    aClass someObject;
    someObject.do_stuff();
}

1 个答案:

答案 0 :(得分:0)

你需要在类中使print_number声明为静态。 只需替换

class aClass 
{
    private:
    number;

    public:
    void do_stuff(void);
    void* print_number(void* arg)   

};

使用以下代码

class aClass 
{
    private:
    int number;

    public:
    void do_stuff(void);
    static void* print_number(void* arg);

};

这只是课堂部分。 编译它希望它能解决你的问题。