在考虑重复之前,请先阅读完整的问题。
我在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()
声明为静态。我试过这两种方法,但它没有用。可能是,我做错了或遗失了什么。
对此有什么想法吗?