gpt4 book ai didi

C++ freeRTOS 任务,非静态成员函数的无效使用

转载 作者:太空狗 更新时间:2023-10-29 20:21:07 27 4
gpt4 key购买 nike

问题出在哪里?

void MyClass::task(void *pvParameter){
while(1){
this->update();
}
}

void MyClass::startTask(){
xTaskCreate(this->task, "Task", 2048, NULL, 5, NULL);
}

但是,我明白了:

error: invalid use of non-static member function

我找不到任何有用的文档来检查错误在哪里,
但我认为应该是这样的:(C++11 的 std::thread)例如:

xTaskCreate(&MyClass::task, "Task", 2048, (void*)this, 5, NULL);

适合我的解决方案:

void MyClass::task(){
while(1){
this->update();
}
}

static void MyClass::startTaskImpl(void* _this){
static_cast<MyClass*>(_this)->task();
}

void MyClass::startTask(){
xTaskCreate(this->startTaskImpl, "Task", 2048, this, 5, NULL);
}

最佳答案

我将此模式与包装函数一起使用,以使用非静态成员函数实例化 pthread。xTask中调用的函数是静态成员函数,使用void*指针调用任务函数。我的类.hpp :

class MyClass {
public:
MyClass() {}
~MyClass() {}
private:
void update();
void task();
static void startTaskImpl(void*);
void startTask();
}

我的类.cpp :

void MyClass::task(){
while(1){
this->update();
}
}

void MyClass::startTaskImpl(void* _this){
(MyClass*)_this->task();
}
void MyClass::startTask(){
xTaskCreate(this->startTaskImpl, "Task", 2048, this, 5, NULL);
}

关于C++ freeRTOS 任务,非静态成员函数的无效使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45831114/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com