Exercise+6.2

=Introducing Exercise 6.2= Øvelsen laves i Windows og der benyttes nogle af OS API's ressourcer. Som bla. omhandler: Ligesom vi også benyttede i Exercise 6.1 =Exercise 1=
 * Tråde
 * Timer
 * Semaforer
 * Scoped Locker
 * Mailbox
 * How do you encapsulate the information that must be sent around in the system?
 * Ved brug af en klasse.
 * What resource do you need for communication between the Input Thread and the Storage Thread?
 * Mailbox
 * How do you make the Info Thread look every 3 seconds for new data?
 * Ved brug af SleepTimer, og en while-løkke
 * while(1){
 * sleep(3000); }
 * How do you secure atomic access to the most recent info between the Storage Thread and the Info Thread?
 * Ved brug af semafor.

=Exercise 2= InputThread skal promte brugeren og brugerens navn og cpr nummer. Derefter sender inputThread en besked til mailboxen, som storageThread kan tilgå og hente beskeder fra. Når den modtager en besked, deler den sin besked med infoThread. InfoThread er ansvarlig for at modtage de nyeste beskeder som er sendt hvert 3 sekund. Hvis den sendte besked er ny, altså ikke samme navn og cpr som sidste besked udskrives dette på skærmen. Her ses et klasse diagram som viser forholdet imellem klasserne:

=Exercise 3= Implementeringen af de forskellige klasser: inputThread skal promte brugeren om navn og cpr. Vi laver et objekt af userData(sendt). Dette objekt bruger vi til at tilgå navn og cpr som begge er string's og tilhøre userData klassen. Som fungere som en container. getline(cin, sendt.navn) benytter vi fordi den kan klare strings, som er den type navn og cpr er opgivet som i container klassen. Derudover læser getline indtil der trykkes enter, hvorimod "cin >>" læser indtil der trykkes space( kommer et mellemrum). code format="cpp" userData sendt; SleepTimer t;

while(1) {   cout << "Please enter your name: "; getline(cin,sendt.navn); cout << "please enter your social security number: "; getline(cin, sendt.cpr);

mailbox.put(sendt);

t.sleep(1000); } code storageThread skal hente sendt besked fra inputThread i deres fælles mailbox. Både navn og cpr ligger gemt i objektet "sendt" som inputThread sendte til den fælles mailbox. storageThread's constructor får 3 parameter. En reference fra Mailbox, en reference fra Monitor og en reference fra userData. infoBesked er et objekt fra userData, som som bruges til at lagre den besked der bliver hentet i storageThread. Objekte infoBesked lægges i Monitor, ved hjælp af monitors put funktion. code format="cpp" void storageThread::run {   while(true) {       infoBesked = mailbox.get; monitorObj.put(infoBesked); } } code =Exercise 4= Nu skal systemet ændres så systemet istedet kan håndtere biler med (make, model, colour and licens plate). Hvis vores systemet havde været opbygget som template, havde det ikke været det store problem at tilføje dette til vores systemet. Derfor bliver det en smule mere omfattende at ændre programmet fra at Person data, til Bil data. Systemet virker grundlæggende på fuldstændig på samme måde. Initialisering i constructor, parameterlister er ændret, så det passer til bil data med passende navne. Dette havde vi været foruden, hvis vi havde opbygget systemet som template. Vi har startet med at ændre structen, så denne indeholder 4 strings iistedet for 2 fra før: code format="cpp" struct userData{ string make; string model; string colour; string lic_plate; }; code Nedenunder ses at koden fra Exercise er udbygget så det passer de nye kriterier. Nu tjekker systemet på make, model, colour og licens-plate. Der udskrives så længe der ikke bliver skrevet samme information på en bil. Hvis dette forekommer, udskrives der ikke! code format="cpp" while(1) {   carInfo = monitorObj.get;

if((carInfo.make != senesteBesked.make) && (carInfo.model != senesteBesked.model)   && (carInfo.colour != senesteBesked.colour) && (carInfo.lic_plate != senesteBesked.lic_plate)) {       cout << "Make: " << carInfo.make << endl; cout << "Model: " << carInfo.model << endl; cout << "Farve: " << carInfo.colour << endl; cout << "Licens-Plate: " << carInfo.lic_plate << endl; senesteBesked = carInfo; }   // Der skrives userinformation hvert 3 sekund t.sleep(3000); } code