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

What is wrong with my method signature when passing method pointer to pthread_create?

本文关键字:方法 我的 问题 什么 create 指针 pthread      更新时间:2023-10-16

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

不能将成员函数指针传递给pthread_create

您需要在类中声明一个适当的static函数(可以使用void*参数传递this指针)。

class medianfilter {
    static void* computeSignalBlock(void *);
};
void *medianfilter::computeSignalBlock(void *instance) {    
    medianfilter* thisPtr = reinterpret_cast<medianfilter*>(instance);
    //TODO I need  access to instance variables!
}