将方法指针传递给pthread_create时,我的方法签名有什么问题?

时间:2014-10-23 09:11:57

标签: c++

在我的头文件中,我在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!
}

1 个答案:

答案 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!
}