Das ist C++11. Ich hab dir ja versprochen ein wenig zu erklären wie dort die Dinge laufen, damit du den Bitmasken und VHDL ein wenig entkommen kannst;-)
Also seit C++11 git es den header <thread> damit kann man ganz einfach einen thread starten:
std::thread myThread(func, p1, p2, p3)
dait würde man eine Funktion func mit den parametern p1, p2 und p3 in einem neuen thread starten.
Nun siehst du bei mir aber wie ich statt ner funktion ein objekt übergebe. Das Objekt ist ein "Funktor" vereinfacht ist das ne Klasse die einen funktionsoperator definiert. Z.B. class func { void operator(int p1, void* p2, char& p3);}
jetzt muss man noch aufpassen den einfacher wäre ja das std::ref wegzulassen
std::thread myThread(func, p1, p2, p3); aber dann würde er eine Kopie von func übergeben. Da ich aber eine referenz auf das vorher angelegte objekt übergeben will (weil ich ja auch von außen auf das gleiche objekt zugreifen will) muss ich explizit ausdrücken, das ich hier eine referenz übergeben will. Normalerweise macht der kompiler ja immer automatisch eine referenz drauf, hier aber nicht weil das standard verhalten eben von einer kopie ausgeht. Und explizit kann man halt mit std::ref() eine referenz erzwingen. genauso brauch ich das in unserem fall weil ich ja nur eine referenz auf den output stream übergeben will und keine kopie von std::cout.
um sich das ständige std:: zu sparen kann man auch irgendwo am anfang schreiben:
using std::thread;
using std::ref;
dringend abzuraten ist von: "using namespace std;" den das importiert den gesamten namespace und das macht nicht nur das kompilieren aufwändiger sondern provoziert auch namenskollisionen.
Vielleicht integriere ich den thread noch in BroadcastReceiver, aber da gibt es im Moment nur zwei schlechte Lösungen und die eine siehst du gerade implementiert. Meien Alternative ist noch nicht schöner, da muss ich mir noch was überlegen.