public ref class TraadKlasse { public: static void traadramme() { int teller=0; array<string^>^colornames = Enum::GetNames(ConsoleColor::typeid);

Like dokumenter
// Handlanger.cpp : main project file. #include "stdafx.h"

Console::Write("Velg en prosess ved å trykke et nummer"); Console::Write("1. Start Kalkulatoren"); Console::Write("2.

2. ØVING I WINDOWS FRA CHRISTIAN ANDOLO

static int ant_steiner; //antall steiner static int teller2 = 0; //teller for printing til Thread^ murer; //murertråden

static int skrivetidsfrist = 0; // antall overskredet tid når skrive

Program delegate. Lage et nytt prosjekt i Visual Studio

1 ØVING I WINDOWS FRA CHRISTIAN ANDOLO

Program socket server

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

INF Løsning på seminaropppgaver til uke 8

EKSAMEN. Operativsystemer. Kontroller at oppgaven er komplett før du begynner å besvare spørsmålene.

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

UNIVERSITETET I OSLO

TOD063 Datastrukturer og algoritmer

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

INF 1010, vår 2005 Løsningsforslag uke 11

OPPGAVE 5b og 8b Java Kode

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

La oss begynne med en repetisjon av hva som skjer når du kjører Javaprogrammet

Synkronisering II. Kapittel 7. Betingelse oppfylt (0) liste. tråd-deskriptor. venteliste. tråd-deskriptor. tråd-deskriptor.

INF1010. Grensesnittet Comparable<T>

import java.io.*; import java.util.*; import javagently.text;

Eksamen INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 %

INF1000 oppgaver til uke 38 (17 sep 23 sep)

1,r H øgs kolen i Østfol d

INF Notater. Veronika Heimsbakk 10. juni 2012

Synkronisering I. Kapittel 6. Tråd A. ferdig. t.varsle() u.vente() Tråd B. ferdig. tid

Løsningsforslag til eksamen i INF1000 våren 2006

Kontinuasjonseksamen

Del 3: Evaluere uttrykk

Programmering i C++ Løsningsforslag Eksamen høsten 2005

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

Lenkelister. Lister og køer. Kopi av utvalgte sider fra forelesningen.

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

HØGSKOLEN I SØR-TRØNDELAG

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

Høgskolen i Gjøvik Institutt for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

Program brusautomat Eksempel på en tilstandsmaskin

Repetisjon. INF gruppe 13

INF100 Institutt for informatikk Universitetet i Bergen Øving 5

GUI («Graphical User Interface») del 2

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Kontinuasjonseksamen

IN Notat om I/O i Java

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Sensur-veiledning INF1000 h 2013 (fasit) am - 6. des. 2013

Sortering med tråder - Quicksort

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

INF1010. grensesni-et Comparable<T> grensesni-et Iterable<T> rekursjon

import java.util.arraylist;

Avdeling for ingeniørutdanning Institutt for teknologi

Kapittel 9: Sortering og søking Kort versjon

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Løsningsforslag

Seminaroppgaver IN1010, uke 2

UNIVERSITETET I OSLO

INF2440 Prøveeksamen, løsningsforslag, 20 mai Arne Maus PSE, Inst. for informatikk

INF Uke 10. Ukesoppgaver oktober 2012

UNIVERSITETET I OSLO

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Plan for dagen. Kræsj-kurs i sanntidsprogrammering. Måter å tenke på. Programmering intro. Tråder & synkronisering

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

Kontinuasjonseksamen

Dagens tema C, adresser og pekere

Ark 3 av 26. printf("i adresse %08x ligger b med verdien %d.\n", &b, b); printf("i adresse %08x ligger a med verdien %d.

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Eksamensoppgave i IMT1082 Objekt-orientert programmering

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Leksjon 7. Filer og unntak

E K S A M E N. Grunnleggende datakunnskap og programmering 02HIND*, 02HINE*, 02HDMU*, 02HING*, 02HGEOMAA, 02HSIV5

IN våren 2018 Tirsdag 16. januar

IN våren 2019 Onsdag 16. januar

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Side 1 av 11, prosesser, tråder, synkronisering, V. Holmstedt, HiO 2006

Eksamen. Objekt-orientert programmering

Jentetreff INF1000 Debugging i Java

(MVC - Model, View, Control)

INF2100. Oppgaver 26. september til 1. oktober 2007

UNIVERSITETET I OSLO

INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java

Oppgave 1 (Programtolkning) INF1000 Eksamen V06. Oppgave 1 (Programtolkning) Oppgave 1 (Programtolkning)

INF1000 (Uke 4) Mer om forgreninger, While-løkker

INF1000: Forelesning 4. Mer om arrayer Metoder

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Forelesning inf Java 4

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Tre måter å lese fra terminal.

UNIVERSITETET I OSLO

E K S A M E N. Grunnleggende datakunnskap og programmering 98HINDA / 98HINDB / 98HINEA 98HDMUA / 98HDMUB / 98HINGA

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

UNIVERSITETET I OSLO

MER OM ARRAYER. INF1000: Forelesning 4. Anta at vi ønsker å lagre en liste med navnene på alle INF1000-studentene:

Transkript:

// Øving uke 2 // Program ramme #include "stdafx.h" using namespace System; using namespace System::Threading; using namespace System::Diagnostics; public ref class TraadKlasse public: static void traadramme() int teller=0; array<string^>^colornames = Enum::GetNames(ConsoleColor::typeid); while(true) Thread::Sleep(1000); ConsoleColor spartcolor = Console::BackgroundColor; int Posx = Console::CursorLeft; int Posy = Console::CursorTop; if (++teller == colornames->length) teller = 0; Console::BackgroundColor = *dynamic_cast<consolecolor^> (Enum::Parse(ConsoleColor::typeid, colornames[teller])); for (int i=1; i<=20; i++) Console::CursorLeft = i; Console::CursorTop = 1; Console::Write(" "); Console::CursorTop = 11; Console::Write(" "); for (int j=1; j<=11; j++) Console::CursorLeft = 1; Console::CursorTop = j; Console::Write(" "); Console::CursorLeft = 21; Console::Write(" "); Console::BackgroundColor = spartcolor; Console::CursorLeft = Posx; Console::CursorTop = Posy; 1

public: static void Start() ThreadStart^ threaddelegate1 = gcnew ThreadStart(traadRamme); Thread^ traad = gcnew Thread(threadDelegate1); traad->start(); ; // end class Traadklasse int main(array<system::string ^> ^args) Console::Title = "Øving 3, uke 2"; TraadKlasse^ traadobj = gcnew TraadKlasse(); traadobj->start(); Console::WriteLine("\n\n"); Console::WriteLine(" 1. Kalkulator"); Console::WriteLine(" 2. Paint"); Console::WriteLine(" 3. NotePad"); Console::WriteLine(" 4. Excel"); while (true) Console::CursorLeft = 4; Console::CursorTop = 8; Console::Write("Gi et valg: "); Console::CursorLeft = 16; String^ str = Console::ReadLine(); int valg = Convert::ToInt32(str); String^ prog; switch (valg) case 1: case 2: case 3: case 4: prog = "calc.exe"; break; prog = "mspaint.exe"; break; prog = "notepad.exe"; break; prog = "excel.exe"; break; Process^ minprosses = gcnew Process; ProcessStartInfo^ minprossesstartinfo = gcnew ProcessStartInfo(prog); minprosses->startinfo = minprossesstartinfo; minprosses->start(); return 0; 2

// Øving uke 3 Program synkronisering // Murer og handlanger #include "stdafx.h" using namespace System; using namespace System::Threading; public ref class Murstein private: static int ant_steiner; static Semaphore^ stabel_semafor; static Semaphore^ tom_semafor; static Semaphore^ full_semafor; static Mutex^ skjerm_mutex; public: static void murer() Random^ rand = gcnew Random; while (true) stabel_semafor->waitone(); --ant_steiner; if (ant_steiner == 14) full_semafor->release(); skjerm_mutex->waitone(); ConsoleColor spar = Console::ForegroundColor; Console::ForegroundColor = ConsoleColor::Yellow; Console::WriteLine("\n Murer tar en stein:\t\t" + ant_steiner + " steiner i stabelen"); Console::ForegroundColor = spar; skjerm_mutex->releasemutex(); stabel_semafor->release(); // må frigi etter utskrift // av ant_steiner if (ant_steiner == 0) tom_semafor->waitone(); Thread::Sleep(1000 * rand->next(1, 2)); static void handlanger() Random^ rand = gcnew Random; while (true) 3

stabel_semafor->waitone(); ++ant_steiner; if (ant_steiner == 1) tom_semafor->release(); skjerm_mutex->waitone(); ConsoleColor spar = Console::ForegroundColor; Console::ForegroundColor = ConsoleColor::White; Console::WriteLine("\n Handlanger legger en stein:\t" + ant_steiner + " steiner i stabelen"); Console::ForegroundColor = spar; skjerm_mutex->releasemutex(); stabel_semafor->release(); // må frigi etter utskrift // av ant_steiner if (ant_steiner == 15) full_semafor->waitone(); Thread::Sleep(1000 * rand->next(3, 5)); static void Main() ant_steiner = 10; stabel_semafor = gcnew Semaphore(1,1); tom_semafor = gcnew Semaphore(0,1); full_semafor = gcnew Semaphore(0,1); skjerm_mutex = gcnew Mutex(); ThreadStart^ threaddelegate1 = gcnew ThreadStart(murer); ThreadStart^ threaddelegate2 = gcnew ThreadStart(handlanger); Thread^ traad1 = gcnew Thread(threadDelegate1); traad1->start(); ; Thread^ traad2 = gcnew Thread(threadDelegate2); traad2->start(); int main(array<system::string ^> ^args) Console::Title = "Murer og handlanger"; Murstein^ obj = gcnew Murstein(); obj->main(); return 0; 4

// Øving uke 4 Program interprosess kommunikasjon // Prosess handlanger (samarbeider med Prosess murer) #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 antall_i_stabel() int antsteiner; String^ filnavn = "C:\\kladd\\steinfil.txt"; FileStream^ fs = gcnew FileStream(filnavn, FileMode::Open); BinaryFormatter^ formatter = gcnew BinaryFormatter; antsteiner = (int)formatter->deserialize(fs); catch (SerializationException^ ) Console::WriteLine("Kunne ikke lese fil"); fs->close(); return(antsteiner); void oppdatstabel(int antsteiner) String^ filnavn = "C:\\kladd\\steinfil.txt"; FileStream^ fs = gcnew FileStream(filnavn, FileMode::Create); BinaryFormatter^ formatter = gcnew BinaryFormatter; formatter->serialize(fs, antsteiner); catch (SerializationException^ ) Console::WriteLine("Kunne ikke skrive til fil"); fs->close(); 5

int main(array<system::string ^> ^args) Console::Title = "Prosess handlanger"; int ant_steiner = 10; oppdatstabel(10); // skriver 10 steiner til fil Mutex^ stabel_mutex = gcnew Mutex(false, "stabel_mutex"); Mutex^ skjerm_mutex = gcnew Mutex(false, "skjerm_mutex"); // false for å angi at skjerm_mutex skal brukes av andre prosesser // Oppretter to event objekter EventWaitHandle^ tomt_event = gcnew EventWaitHandle(false, EventResetMode::AutoReset, "tomt_event"); EventWaitHandle^ fullt_event = gcnew EventWaitHandle(false, EventResetMode::AutoReset, "fullt_event"); Random^ rand = gcnew Random; while (true) stabel_mutex->waitone(); ant_steiner = antall_i_stabel();// henter antall steiner fra fil ++ant_steiner; oppdatstabel(ant_steiner); // skriver til fil if (ant_steiner == 1) tomt_event->set(); skjerm_mutex->waitone(); Console::WriteLine("\n Handlanger legger en stein:\t" + ant_steiner + " steiner i stabelen"); skjerm_mutex->releasemutex(); stabel_mutex->releasemutex(); // må frigi etter bruk // av ant_steiner if (ant_steiner == 25) fullt_event->waitone(); Thread::Sleep(1000 * rand->next(3, 4)); return 0; 6

// Øving uke 4 Program interprosess kommunikasjon // Prosess murer (samarbeider med Prosess handlanger) #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 antall_i_stabel() int antsteiner; String^ filnavn = "C:\\kladd\\steinfil.txt"; FileStream^ fs = gcnew FileStream(filnavn, FileMode::Open); BinaryFormatter^ formatter = gcnew BinaryFormatter; antsteiner = (int)formatter->deserialize(fs); catch (SerializationException^ ) Console::WriteLine("Kunne ikke lese fil"); fs->close(); return(antsteiner); void oppdatstabel(int antsteiner) String^ filnavn = "C:\\kladd\\steinfil.txt"; FileStream^ fs = gcnew FileStream(filnavn, FileMode::Create); BinaryFormatter^ formatter = gcnew BinaryFormatter; formatter->serialize(fs, antsteiner); catch (SerializationException^ ) Console::WriteLine("Kunne ikke skrive til fil"); fs->close(); int main(array<system::string ^> ^args) 7

Console::Title = "Prosess murer"; int ant_steiner; Mutex^ stabel_mutex = nullptr; Mutex^ skjerm_mutex = nullptr; EventWaitHandle^ tomt_event = nullptr; EventWaitHandle^ fullt_event = nullptr; // Skal først åpne tilgang til semafor, mutex og Event objektene stabel_mutex = Mutex::OpenExisting("stabel_mutex"); catch (WaitHandleCannotBeOpenedException^ ex) Console::WriteLine("Kunne ikke åpne stabel_semafor: 0", ex->message); catch (UnauthorizedAccessException^ ex) Console::WriteLine("Ikke tilgang til stabel_semafor: 0", ex->message); skjerm_mutex = Mutex::OpenExisting("skjerm_mutex"); catch (WaitHandleCannotBeOpenedException^ ex) Console::WriteLine("Kunne ikke åpne skjerm_mutex: 0", ex->message ); catch (UnauthorizedAccessException^ ex) Console::WriteLine("Ikke tilgang til skjerm_mutex: 0", ex->message ); tomt_event = EventWaitHandle::OpenExisting("tomt_Event"); catch (WaitHandleCannotBeOpenedException^ ex) Console::WriteLine("Kunne ikke åpne fullt_event: 0", ex->message); catch (UnauthorizedAccessException^ ex) Console::WriteLine( L"Ikke tilgang til tomt_event: 0", 8

ex->message ); fullt_event = EventWaitHandle::OpenExisting("fullt_Event"); catch (WaitHandleCannotBeOpenedException^ ex) Console::WriteLine("Kunne ikke åpne fullt_event: 0", ex->message); catch (UnauthorizedAccessException^ ex) Console::WriteLine("Ikke tilgang til fullt_event: 0", ex->message); Random^ rand = gcnew Random; Console::WriteLine(); while (true) stabel_mutex->waitone(); ant_steiner = antall_i_stabel();// henter antall steiner fra fil --ant_steiner; oppdatstabel(ant_steiner); // skriver til fil if (ant_steiner == 24) fullt_event->set(); skjerm_mutex->waitone(); Console::WriteLine("\n Murer tar en stein:\t\t" + ant_steiner + " steiner i stabelen"); skjerm_mutex->releasemutex(); stabel_mutex->releasemutex(); // må frigi etter bruk av ant_steiner if (ant_steiner == 0) tomt_event->waitone(); Thread::Sleep(1000 * rand->next(1, 2)); return 0; 9

// Øving uke 4 // Program monitor synkronisering #include "stdafx.h" using namespace System; using namespace System::Threading; using namespace System::Collections; public ref class MonitorOving3 // member variables private: static ArrayList^ m_liste; // member functions public: static void foytilob(string^ str) Monitor::Enter(m_liste); if (m_liste->count < 10) m_liste->add(str); Monitor::Exit(m_liste); public: static void fjernob1() Monitor::Enter(m_liste); if (m_liste->count > 0) m_liste->removeat(0); Monitor::Exit(m_liste); public: static void skrivliste() Monitor::Enter(m_liste); if (m_liste->count > 0) Console::WriteLine(); for (int i=0; i<m_liste->count; i++) String^ str = (String^)m_liste[i]; Console::Write(" " + str); Console::WriteLine(); Monitor::Exit(m_liste); 10

public: static void Traad1() Random^ rand = gcnew Random(); int teller=0; while(true) String^ str = (++teller).tostring(); foytilob(str); skrivliste(); int pause = rand->next(1, 2); Thread::Sleep(1000*pause); public: static void Traad2() Random^ rand = gcnew Random(); while(true) fjernob1(); int pause = rand->next(2, 3); Thread::Sleep(1000*pause); void Start() m_liste = gcnew ArrayList; ThreadStart^ threaddelegate1 = gcnew ThreadStart(Traad1); ThreadStart^ threaddelegate2 = gcnew ThreadStart(Traad2); Thread^ traad1 = gcnew Thread(threadDelegate1); traad1->start(); Thread::Sleep(5000); ; Thread^ traad2 = gcnew Thread(threadDelegate2); traad2->start(); 11

int main(array<system::string ^> ^args) Console::Title = "Monitor øving 3"; MonitorOving3^ oving = gcnew MonitorOving3; oving->start(); Console::WriteLine(L"\n\n"); return 0; 12