// Handlanger.cpp : main project file. #include "stdafx.h" using namespace System; using namespace System::Threading; using namespace System::IO; using namespace System::Runtime::Serialization; using namespace System::Runtime::Serialization::Formatters::Binary; int main(array<system::string ^> ^args) Console::Title = "Handlanger"; int ant_steiner = 10; //Legg 10 steiner i stabelen String^ filnavn = "C:\\Users\\Chrisandolo\\Desktop\\ant_steiner.txt"; //Stabelfilen legges her FileStream^ fs = gcnew FileStream(filnavn, FileMode::Create); //Lag formatter->serialize(fs, ant_steiner); //Skriv antall steiner til Console::WriteLine("Klarte ikke å skrive til fil"); //Skriv feilmelding om det ikke går fs->close(); //Lukk koblingen til Semaphore^ stabel_semafor = gcnew Semaphore(1,1, "stabel_semafor"); Mutex^ skjerm_mutex = gcnew Mutex(false, "skjerm_mutex"); EventWaitHandle^ tomt_event = gcnew EventWaitHandle(false, EventResetMode::AutoReset, "tomt_event"); EventWaitHandle^ fullt_event = gcnew EventWaitHandle(false, EventResetMode::AutoReset, "fullt_event"); Random^ rand = gcnew Random; //Lag en random while (true) stabel_semafor->waitone(); //Ta over styringa av stabelen String^ filnavn = "C:\\Users\\Chrisandolo\\Desktop\\ant_steiner.txt"; //Stabelfilen ligger her FileStream^ fs = gcnew FileStream(filnavn, FileMode::Open); //Åpne ant_steiner = (int)formatter->deserialize(fs); //Les innholdet i som variabelen ant_steiner Console::WriteLine("Kunne ikke lese fil"); //Skriv feilmelding om det ikke går fs->close(); //Lukk ++ant_steiner; //Legg til en på tallet lest i fra FileStream^ fs2 = gcnew FileStream(filnavn, FileMode::Create); //Lag en ny stabelfil formatter->serialize(fs2, ant_steiner); //Skriv det nye tallet til filen
det ikke går Console::WriteLine("Kunne ikke skrive til fil"); //Skriv feilmelding om fs2->close(); //Lukk if (ant_steiner == 1) //Hvis ant_steiner er lik 1 tomt_event->set(); //Set eventen tomt_event skjerm_mutex->waitone(); //Tar over styringen av skjermen Console::WriteLine("\n Handlanger legger en stein i stabelen: " + ant_steiner + " steiner i stabelen"); //Skriv til skjerm skjerm_mutex->releasemutex(); //Slipp skjermen stabel_semafor->release(); //Slipp styringen av if (ant_steiner == 25) //Er det mer en 25 steiner i stabelen fullt_event->waitone(); //Kjør fult_event Thread::Sleep(1000 * rand->next(1, 4)); //Sov i ett til fire sekunder return 0; #include "stdafx.h" using namespace System; using namespace System::Threading; using namespace System::IO; using namespace System::Runtime::Serialization; using namespace System::Runtime::Serialization::Formatters::Binary; int main(array<system::string ^> ^args) Console::Title = "Murer"; int ant_steiner; //Definer antall steiner variablen Semaphore^ stabel_semafor = nullptr; Mutex^ skjerm_mutex = nullptr; EventWaitHandle^ tomt_event = nullptr; EventWaitHandle^ fullt_event = nullptr; stabel_semafor = Semaphore::OpenExisting("stabel_semafor"); //Prøv å åpne
eksisterende stabel_semafor Console::WriteLine("Kunne ikke åpne stabel_semafor: 0", ex->message); //Går ikke det, skrivfeilmelding Console::WriteLine("Ikke tilgang til stabel_semafor: 0", skjerm_mutex = Mutex::OpenExisting("skjerm_mutex"); //Prøv å åpne eksisterende skjerm_mutex Console::WriteLine("Kunne ikke åpne skjerm_mutex: 0", Console::WriteLine("Ikke tilgang til skjerm_mutex: 0", tomt_event = EventWaitHandle::OpenExisting("tomt_Event"); //Prøv å åpne eksisterende tomt_event Console::WriteLine("Kunne ikke åpne fullt_event: 0", Console::WriteLine( L"Ikke tilgang til tomt_event: 0", fullt_event = EventWaitHandle::OpenExisting("fullt_Event"); //Prøv å åpne eksisterende fullt_event Console::WriteLine("Kunne ikke åpne fullt_event: 0",
Console::WriteLine("Ikke tilgang til fullt_event: 0", Random^ rand = gcnew Random; Console::WriteLine(); while (true) stabel_semafor->waitone(); //Ta over styringen av stabelen String^ filnavn = "C:\\Users\\Chrisandolo\\Desktop\\ant_steiner.txt"; //Stabelfilen ligger her FileStream^ fs = gcnew FileStream(filnavn, FileMode::Open); //Åpne ant_steiner = (int)formatter->deserialize(fs); //Les innholdet i som variabelen ant_steiner filen Console::WriteLine("Kunne ikke lese fil"); //Skriv feilmelding om det ikke går fs->close(); --ant_steiner; //Fjern en stein i fra stabelen FileStream^ fs2 = gcnew FileStream(filnavn, FileMode::Create); //Lag en ny stabelfil formatter->serialize(fs2, ant_steiner); //Skriv det nye tallet til Console::WriteLine("Kunne ikke skrive til fil"); //Skriv feilmelding om det ikke går fs2->close(); //Lukk if (ant_steiner == 24) //Hvis ant_steiner er lik 24 fullt_event->set(); //Set eventen fullt_event skjerm_mutex->waitone(); //Tar over styringen av skjermen Console::WriteLine("\n Murer tar en stein fra stabelen: " + ant_steiner + " steiner i stabelen"); //Skriv til skjerm skjerm_mutex->releasemutex(); //Slipp skjermen stabel_semafor->release(); //Slipp styringen av if (ant_steiner == 0) //Hvis ant_steiner er lik 0 tomt_event->waitone(); //Set eventen tomt_event Thread::Sleep(1000 * rand->next(1, 4)); //Sov i ett til fire sekunder return 0;