在我的头文件中,我在private
下面有以下声明:
void *computeSignalBlock(void *);
现在,我无法编译尝试将此方法传递给pthread_create方法。错误是:
cannot convert ‘medianfilter::computeSignalBlock’ from
type ‘void* (medianfilter::)(void*)’ to type ‘void* (*)(void*)’
为什么要查看下面的实现?
void medianfilter::computeFilteredResults(vector<float> _signals, int _nThreads,
int _windowSize, bool _isParallel) {
// Set instance variables.
originalSignalVector = _signals;
nThreads = _nThreads;
windowSize = _windowSize;
isParallel = _isParallel;
// Create the threads,
pthread_t threads[nThreads];
pthread_attr_t attr;
// Initialize and set thread joinable
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
for (int i = 0; i < nThreads; i++) {
pthread_create(&threads[i], NULL, computeSignalBlock, (void *) i);
}
}
void *medianfilter::computeSignalBlock(void *block) {
//TODO I need access to instance variables!
}
答案 0 :(得分:2)
您无法将成员函数指针传递给pthread_create
。
您需要在班级中声明适当的static
函数(您可以使用this
参数传递void*
指针。
class medianfilter {
static void* computeSignalBlock(void *);
};
void *medianfilter::computeSignalBlock(void *instance) {
medianfilter* thisPtr = reinterpret_cast<medianfilter*>(instance);
//TODO I need access to instance variables!
}