无法在C ++中将“指向函数的指针”传递给pthread_create

时间:2014-12-30 11:03:25

标签: c++ pthreads function-pointers member-function-pointers

在考虑重复之前,请先阅读完整的问题。

我在C中使用了pthread_create(),接受了它的第三个参数作为"指向一个函数的指针,该函数返回void指针并将void指针作为参数"。

即,pthread_create的第三个参数是void *(*routine)(void *)

所以,我只是想在C ++中使用pthread_create()。我要传递给print()的函数pthread_create()是下面显示的类的成员。

Daemon.cpp

#include "Daemon.h"
#include <iostream>
using namespace std;

Daemon::Daemon() {
}

Daemon::~Daemon() {
}

void *Daemon::print(void *args){
    cout << Hello World" << endl;
    return NULL;
}

为了利用面向对象的C ++设计,我将pthread_create()放在了一个类Thread中。如下所示:

Thread.cpp

#include "Thread.h"
using namespace std;

Thread::Thread( void *(Daemon::*routine)(void *), Daemon& dmObj ) {
    this->thread = 0; //pthread_t thread;
    this->obj = dmObj;// Daemon obj;
    this->functionPointer = routine; // void *(Daemon::*functionPointer)(void *);
}

Thread::~Thread() {

}

int Thread::createThread(){
    //(this->obj.*this->functionPointer)(NULL);
    pthread_create(&this->thread, NULL, (this->obj.*this->functionPointer), NULL);
    return 0;
}

为了让上面的课程正常工作,我从main()打电话给他们,如下所示:

subsfind.cpp

int main(void) {
    Daemon dm;

    Thread t1( &Daemon::print, dm);
    t1.createThread();
}

如果我启用 Thread.cpp 的第四行,即(this->obj.*this->functionPointer)(NULL);,则输出显示为Hello World。 这意味着,上面的代码将指针传递给函数就好了。 但是,我无法将此函数print()(它是类的成员)传递给pthread_create()。 编译器错误是:

Thread.cpp: In member function ‘int Thread::createThread()’:
Thread.cpp:39:72: error: invalid use of non-static member function
pthread_create(&thread, NULL, (this->obj.*this->functionPointer), NULL);

我是C ++的初学者,我不知道我该怎么做才能让这个工作。也许我需要将类Daemon的对象强制转换为静态或将print()声明为静态。我试过这两种方法,但它没有用。可能是,我做错了或遗失了什么。

对此有什么想法吗?

0 个答案:

没有答案