error: invalid use of non-static member function ‘void SampleProcess::frameprocess(const aclmdlDataset*, PicDesc&, int, int)’ if (pthread_create(&frameprocessparam._id,0, frameprocess, &frameprocessparam) == 0)
时间: 2024-04-01 11:32:50 浏览: 63
这个错误提示是因为你在使用 pthread_create 函数时,第三个参数应该传入一个静态函数或全局函数,而你传入的是一个非静态成员函数。
解决这个问题的方法有两种:
1. 将 frameprocess 函数改为静态成员函数或全局函数,这样就可以直接传入 pthread_create 函数中了。
2. 将 frameprocess 函数作为参数传入 pthread_create 函数中,同时将 SampleProcess 对象的指针作为第四个参数传入。在 frameprocess 函数中,可以通过指针访问 SampleProcess 对象的成员函数和变量。
下面是第二种方法的示例代码:
```
// 定义一个结构体,用于传递参数
struct FrameProcessParam {
SampleProcess* obj; // 指向 SampleProcess 对象的指针
const aclmdlDataset* modelInput;
PicDesc& picDesc;
int channelId;
int frameId;
};
// SampleProcess 类的 frameprocess 函数
void SampleProcess::frameprocess(const aclmdlDataset* modelInput, PicDesc& picDesc, int channelId, int frameId) {
FrameProcessParam frameprocessparam = {this, modelInput, picDesc, channelId, frameId};
if (pthread_create(&frameprocessparam._id,0, &SampleProcess::frameprocess_proxy, &frameprocessparam) == 0) {
pthread_detach(frameprocessparam._id);
}
}
// SampleProcess 类的 frameprocess_proxy 函数,用于调用 frameprocess 函数
void* SampleProcess::frameprocess_proxy(void* arg) {
FrameProcessParam* param = reinterpret_cast<FrameProcessParam*>(arg);
param->obj->frameprocess(param->modelInput, param->picDesc, param->channelId, param->frameId);
return nullptr;
}
```
阅读全文