将方法指针传递给pthread_create时,我的方法签名有什么问题
What is wrong with my method signature when passing method pointer to pthread_create?
在我的头文件中,我在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!
}
相关文章:
- 如何重写全局方法名称以在调用原始方法之前将我的代码推到前面
- 我的模板类方法返回错误类型?
- 我无法使用C++指针指向类方法返回的 std::vector
- 查找定义我的 C/C++ 函数/宏的文件比'grep'更简单的方法
- 为什么我的 setter 方法会产生错误的访问错误
- 为什么我的子集和方法不正确?
- 有什么方法可以检测我的类的对象是否在堆栈上创建
- 我无法重写基类的方法,因为我的派生类是模板化的
- 我不确定如何引用此神经网络训练方法中的权重
- 为什么在我的代码中没有调用 g 模拟方法
- 为什么 constexpr 假设我的方法就是 const
- 当我的结构中的任何变量发生更改时触发的事件的任何方法
- 是否有其他方法将.dll文件从一个项目复制到我的启动项目中的可执行文件旁边
- 我的数据结构的最佳序列化方法
- 我的私有方法如何在C++中访问公共枚举
- 我如何确保从我的派生类中调用纯虚拟方法
- 我的链接列表反向递归方法的代码的问题是什么?
- 调用'maps::size(char [20], char&)'没有匹配函数,但我认为我的方法有
- 我的重载后增量方法无法按预期工作。为什么?
- 如何在我的源代码中找到所有发生的情况,其中std :: string被传递给方法作为副本而不是恒定引用