Oppgave 1 // Uke2opggave1.cpp : main project file. #include "stdafx.h" using namespace System; using namespace System::Diagnostics; int main(array<system::string ^> ^args) Console::Title = "Eksempel prosess"; Console::Write("Velg en prosess ved å trykke et nummer"); Console::CursorTop = 5; Console::Write("1. Start Kalkulatoren"); Console::CursorTop = 7; Console::Write("2. Start Paint"); Console::CursorTop = 9; Console::Write("3. Start Notepad"); Console::CursorTop = 11; Console::Write("4. Start Exel"); //Har ikke exel så det blir open office sin versjon av exel
Console::CursorTop = 13; Console::Write("Velg funksjon: "); String^ str = Console::ReadLine(); int valg = System::Convert::ToInt32(str); Process^ calcprosess = gcnew Process; Process^ paintprosess = gcnew Process; Process^ notepadprosess = gcnew Process; Process^ exelprosess = gcnew Process; ProcessStartInfo^ calcprosessinfo = gcnew ProcessStartInfo("C:\\windows\\system32\\calc.exe"); ProcessStartInfo^ paintprosessinfo = gcnew ProcessStartInfo("C:\\windows\\system32\\mspaint.exe"); ProcessStartInfo^ notepadprosessinfo = gcnew ProcessStartInfo("C:\\windows\\system32\\notepad.exe"); ProcessStartInfo^ exelprosessinfo = gcnew ProcessStartInfo("C:\\Program Files\\OpenOffice.org 3\\program\\scalc.exe"); calcprosess->startinfo = calcprosessinfo; paintprosess->startinfo = paintprosessinfo; notepadprosess->startinfo = notepadprosessinfo; exelprosess->startinfo = exelprosessinfo; if(valg == 1) calcprosess->start(); if(valg == 2) paintprosess->start();
if(valg == 3) notepadprosess->start(); if(valg == 4) exelprosess->start(); Console::WriteLine("\n "); return 0; Oppgave 2 // Uke2oppgave2.cpp : main project file. #include "stdafx.h" using namespace System; using namespace System::Threading; /* Her kan du forandre litt i både hvordan du kan prioritere og velge å drøye koden ved å kjøre. Det gjøres ved sleep kommandoen som jeg har lagt før hver gang enten for løkka eller while løkka kjører. Også ved bruk av semaphore kan jeg kjøre to 2 tråder sammtidig, slik at de ikke kræsjer. Uten den ville ikke programmet ha funket. Dette gjørs ved komandoene WaitOne() som gjør at den starter så andre tråder ikke kan kjøre samtidig, og ved release() så stopper tråden. Så disse kommandoen vil fungere om hverandre hvis vi vil kjøre flere prosesser samtidig. */
public ref class TraadEksempel private: static Semaphore^ m_semaforskjerm; public: static void Skriveteller() int teller=0; while(true) //Eving løkke Thread::Sleep(20); m_semaforskjerm->waitone(); if(++teller <= 10000) ConsoleColor::DarkRed; Console::BackgroundColor = Console::CursorLeft = 0; Console::CursorTop = 2; Console::Write("Tråd 1 (Skriver alle tall opp til 10 000 og deretter starte på nytt): " + teller++); else teller=0; ConsoleColor::DarkRed; Console::BackgroundColor = Console::CursorLeft = 0; Console::CursorTop = 2; Console::Write("Tråd 1 (Skriver alle tall opp til 10 000 og deretter starte på nytt): ");
m_semaforskjerm->release(); public: static void Skriveascii() int teller2=0; while(true) //Evig løkke if (++teller2 <= 255) Thread::Sleep(200); m_semaforskjerm->waitone(); ConsoleColor::DarkMagenta; Console::BackgroundColor = Console::CursorLeft = 0; Console::CursorTop = 5; Console::Write("Tråd 2 (Skal skrive ut alle ascii tallene): " + Convert::ToChar(teller2)); //her skrives ut ascii tegnene ved bruk av string(char) else teller2 = 0; m_semaforskjerm->release(); void Main() m_semaforskjerm = gcnew Semaphore(1,1);
ThreadStart^ threaddelegate1 = gcnew ThreadStart(Skriveteller); ThreadStart^ threaddelegate2 = gcnew ThreadStart(Skriveascii); Thread^ traad1 = gcnew Thread(threadDelegate1); //traad1->priority = ThreadPriority::Lowest; //her kan jeg sette prioritet, enten normal, lowest traad1->start(); //starter tråd1 ; Thread^ traad2 = gcnew Thread(threadDelegate2); //traad2->priority = ThreadPriority::Normal; //her kan jeg sette prioritet, enten normal, lowest traad2->start(); //starter tråd2 int main(array<system::string ^> ^args) Console::Title = "Uke 2 Oppgave 2"; TraadEksempel^ tradeksempel = gcnew TraadEksempel(); tradeksempel->main(); //starter trådeksempel return 0; Oppgave 3 // Uke2oppgave3.cpp : main project file. #include "stdafx.h"
using namespace System; using namespace System::Diagnostics; using namespace System::Threading; public ref class Eksempel public: static void Ramme() int teller = 0; array<string^>^colornames = Enum::GetNames(ConsoleColor::typeid); array //Legger fagene i en 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^> colornames[teller])); (Enum::Parse(ConsoleColor::typeid, for (int i=2; i<50 ; i++) Console::CursorLeft = i;
Console::CursorTop = 2; //Øverste Rammen Console::Write("/"); Console::CursorTop = 20; //Nederste Rammen Console::Write("/"); for (int j=2; j<=20 ; j++) Console::CursorLeft = 2; Console::CursorTop = j; //Venstre Ramme Console::Write("/"); Console::CursorLeft = 50; //Høre Ramme Console::Write("/"); Console::BackgroundColor = spartcolor; Console::CursorLeft = Posx; Console::CursorTop = Posy; void Main() ThreadStart^ threaddelegate1 = gcnew ThreadStart(Ramme); Thread^ traad1 = gcnew Thread(threadDelegate1); traad1->start(); //Starter tråden
; int main(array<system::string ^> ^args) Console::Title = "Uke 2 oppgave 3"; Eksempel^ eksempel = gcnew Eksempel(); eksempel->main(); //Kjører Tråden Console::CursorTop = 5; Console::Write("Velg en prosess ved å trykke et nummer"); Console::CursorTop = 8; Console::Write("1. Start Kalkulatoren"); Console::CursorTop = 10; Console::Write("2. Start Paint"); Console::CursorTop = 12; Console::Write("3. Start Notepad"); Console::CursorTop = 14; Console::Write("4. Start Exel");
Console::CursorTop = 16; Console::Write("Velg funksjon: "); String^ str = Console::ReadLine(); int valg = System::Convert::ToInt32(str); Process^ calcprosess = gcnew Process; Process^ paintprosess = gcnew Process; Process^ notepadprosess = gcnew Process; Process^ exelprosess = gcnew Process; ProcessStartInfo^ calcprosessinfo = gcnew ProcessStartInfo("C:\\windows\\system32\\calc.exe"); ProcessStartInfo^ paintprosessinfo = gcnew ProcessStartInfo("C:\\windows\\system32\\mspaint.exe"); ProcessStartInfo^ notepadprosessinfo = gcnew ProcessStartInfo("C:\\windows\\system32\\notepad.exe"); ProcessStartInfo^ exelprosessinfo = gcnew ProcessStartInfo("C:\\Program Files\\OpenOffice.org 3\\program\\scalc.exe"); exel //Har ikke exel så det blir open office sin versjon av calcprosess->startinfo = calcprosessinfo; paintprosess->startinfo = paintprosessinfo; notepadprosess->startinfo = notepadprosessinfo; exelprosess->startinfo = exelprosessinfo; if(valg == 1) calcprosess->start(); if(valg == 2)
paintprosess->start(); if(valg == 3) notepadprosess->start(); if(valg == 4) exelprosess->start(); return 0; Beskrivelse Oppgavene har jeg løst ved hjelp av eksemper fra hjemmesiden til faglærer og litt hjelp fra studass. Det største problemet var rammen i siste oppgave som jeg fikk hjelp av studass. Der prøvde jeg ved hjelp av en teller å skrive manuelt ut fargekoden, men fikk ikke det til å brukte heller en fra fagsiden, der hvor jeg lager en fargeliste og skriver den ut samtidig med rammen. Skjermdumping Oppgave 1 Oppgave 2
Oppgave 3