Øvelse+5.1+-+Thread+Communication+1

=5.1 - Thread Communication 1=

Opgave 1
Klassen //Message// oprettes med en virtual destructor. Grunden til at den SKAL være virtual er, at tingene skal lukkes i den rigtige rækkefølge. Message nedarves altid til andre klasser der skal sendes (f.eks. opgave 2 hvor den arves til et point3D objekt). Disse klasser skal altid lukkes først, derfor skal message være virtuel. Den eneste metode //Message// skal have, er dens destructor

Klassen msgQueue oprettes med 4 metoder: Constructor, Send, Recieve og Destructor. Constructor:
 * Sætter køens max længde
 * Opretter både mutex og conditional

Send:
 * Tager mutex og opretter en //Item// med en besked og et id. //Item// er et struct som har en constructor og 2 attributer, en til beskeden og en til id'et
 * Checker om køen er fuld, ellers åbner mutexen og venter på conditionalen bliver broadcastet
 * En item smide på køen
 * Åbner mutex, og broadcaster conditional

Recieve:
 * Tager mutex, og venter på at køen ikke er tom
 * Henter en item fra køen, og popper det forreste objekt.
 * Henter item'ets id
 * åbner mutex og broadcaster conditional

Destructor:
 * Sletter mutex og conditional
 * Kalder køens destructor

Koden Kan hentes i bunden af siden.

Opgave 2
Vi opretter to structs (Udelukkende for at give vores //Handler//-funktion noget at lave) Den ene struct er en item af typen Point3D, den anden er af typen Point4D. Point3D har 3 tal, Point 4D har 4 tal. Til at bestemme om det er en Point3D besked eller en Point4D besked, laves der en enumeration til beskedens id. Vi har til denne opgave lavet 3 funktioner. En sender, en modtager og en besked handler

Sender:
 * Tager beskedkøen fra parameteren af funktionen
 * inde i et while(1) loop lader vi et tal inkrementere. Der skiftevis oprettes et Point3D og et Point4D objekt hver gang tallet inkrementeres
 * Der tilføjes tal til den oprettede beskeds 3 eller 4 attributer, og sender denne til beskedkøen, med et id beskrivende om hvilken type beskeden er

Modtager:
 * Tager beskedkøen fra parameteren af funktionen.
 * Inde i et while(1) loop henter vi fra den føromtalte beskedkø
 * Beskeden sendes til handleren med id'et fra den hentede besked og selve beskeden

Handler:
 * Hvis ID'et beskriver en Point3D besked, udskrives der at en Point3D besked er modtaget, samt dennes 3 tal
 * Hvis ID'et beskriver en Point4D besked, udskrives der at en Point4D besked er modtaget, samt dennes 4 tal

Herunder findes koden for beskeden, beskedkøen og opgave 2's fil: