MUP1+-+Øvelse+5.1

Send funktionen tager imod et ID og en pointer til en message. Først tager vi mutex, da vi skal ind og arbejde på delt data. While går ind og tjekker om køen er fuld, hvis den er, så skal den vente på at en besked er blevet poppet. Når køen ikke er fuld opretter vi et item "i" som vi lægger id'et og messagen vi har fået som argument ind i. Vi lægger så beskeden i messagequeuen med i som argument. Informere om at køen ikke længere er tom/ altså at vi lige har lagt noget i den - og så slipper vi mutex igen.
 * Exercise 1: Creating a message queue**

Receive funktionen tager imod en id reference Først locker vi og while tjekker så om køen er tom. Hvis køen ikke er tom, laver vi et item "i". Vi ligger så den første message i køen over i "i". vores reference id sætter vi så til det id som var i beskeden, og så fjerne vi beskeden fra fronten af køen. Fortæller at køen ikke er fuld, altså at vi har fjerne en besked, og så unlocker vi mutex.

Vi har to threadfunktioner. sendthreadFunc, står for at lægge en ny besked i messagequeuen, hvilket sker igennem "sendPrintreq(mq). receivethreadFunc, står hele tiden og tager beskeder af køen og sender dem videre til message_handler, som så sætter gang i de nødvendige funktionskald, afhængig af ID. Det er vigtigt at static_caste argumentet, da vi skal være sikre på, at det er til en MsgQueue.
 * Exercise 2: Sending data from one thread to another**

argumentet der sendes med, er recieve messagequen, da begge threadfunktioner skal kende denne, for henholdsvis at lægge i og tage fra den.

Vores message_handler, går ind og tjekker på hvad id er, og reagere så ud fra dette via en switch case - i denne opgave er der kun 1 muligt ID, men der kunne have været mange forskellige.

SendPrintReq laver en ny Point3DMsg* req go sender det så til den messagequeue som den skal have med som argument.