我想在我的AHRS类中创建一个函数ahrs thats的线程。此函数处于无限循环中,并始终计算某些内容,并将这些计算结果放入变量中。我想将这些变量传递给我的PID
int main() {
AHRS* a = new AHRS();
std::thread ahrs(a->ahrs());
PID* p = new PID();
float pitch;
while(1) {
pitch = a->getPitch();
std::cout << "pitch: " << pitch << " pid: " << p->getError(0, pitch, 1) << std::endl;
usleep(100000);
}
}
但是我得到了错误
main_ahrs.cpp: In function ‘int main()’:
main_ahrs.cpp:26:28: error: invalid use of void expression
我的ahrs.cpp看起来像这样:
#include "AHRS.h"
AHRS::AHRS() {
//something
}
AHRS::~AHRS() {}
void AHRS::ahrs() {
//something
while(1) {
//something
}
}
float AHRS::getPitch() {
//return something
}
float AHRS::getRoll() {
//return something
}
float AHRS::getYaw() {
//return something
}
感谢您的帮助
最佳答案
尝试这样:
#include <functional>
接着:
std::thread ahrs(std::bind(&AHRS::ahrs, a));
您正在执行的方式是调用
a->ahrs()
方法,该方法返回void
。您必须将可以被调用的东西传递给std::thread
:函数指针或类似的东西,而不是void
。在我的建议情况下,您将把
std::thread
的返回值传递给std::bind
,这是一个可调用对象,该对象带有指向方法的指针和指向AHRS
对象的指针。