So hier noch mal ein Beispiel, auf Raspian getestet. Die returns sind doch nötig.
Code:
#include <stdio.h>
#include <pthread.h>
class PID
{
private:
pthread_t m_thread;
int m_a; // Nur Beispielparameter, hier kämen die richtigen Parameter des Reglers hin
int m_b;
static void* helper(void* instance)
{
return ((Pid*) instance)->run();
}
void* run()
{
printf("Die Parameter sind %d %d\n", m_a, m_b);
// Hier käme die Regelschleife rein
return 0;
}
public:
Pid(int a, int b) : m_a(a), m_b(b)
{}
void start()
{
pthread_create(&m_thread, NULL, &helper, this);
}
void stop()
{
pthread_join(m_thread, 0);
}
};
int main()
{
PID test(10, 42);
test.start();
// ...
test.stop();
return 0;
}
Die eigentliche Regelung fände in der Funktion run statt. Man beachte, dass diese und die statische helper Funktion privat sind, also von außen nicht aufgerufen werden dürfen.
Die Parameter würden im Konstruktor gesetzt. Kann man aber auch über Parameter in start lösen.
Ich würde aber trotzdem empfehlen, entweder die Lösung von botty oder richtige C++ Threads zu nehmen.
Lesezeichen