Program delegate. Lage et nytt prosjekt i Visual Studio

Like dokumenter
Om Windows programmering

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

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

2. ØVING I WINDOWS FRA CHRISTIAN ANDOLO

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

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

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

GUI («Graphical User Interface») del 2

Tilstandsmaskiner kalles på engelsk for Finite State Machines.

GUI («Graphical User Interface») del 2

Program socket server

2 Om statiske variable/konstanter og statiske metoder.

1. Å lage programmer i C++

Program brusautomat Eksempel på en tilstandsmaskin

1. NetBeans IDE: Lage en enkel mobilapplikasjon

1. Å lage programmer i C++

1 ØVING I WINDOWS FRA CHRISTIAN ANDOLO

Fra Python til Java, del 2

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

UNIVERSITETET I OSLO

Jentetreff INF1000 Debugging i Java

UNIVERSITETET I OSLO

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

Debugging. Tore Berg Hansen, TISIP

Løsningsforslag for eksamensoppgave, våren 2004

EKSAMEN 6108/6108N PROGRAMMERING I JAVA Alt trykt og skriftlig materiale.

2 Om statiske variable/konstanter og statiske metoder.

Oppgavesett videregående kurs i NVivo 9

HØYSKOLEN I OSLO, AVDELING FOR INGENIØRUTDANNING

. Ved sensur vl1 ahe bokstaverte deloppgaver (a, b, c,...) telle like mye.

Hei verden Introduksjon Swift PDF

Hei verden. Introduksjon. Steg 1: Sette opp Xcode. Skrevet av: Andreas Amundsen

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

Objektorientering i VB en introduksjon

Introduksjon til objektorientert programmering

INF våren 2017

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

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

1. Rullende navn, s 3 2. Smilefjes, s 5 3. Skritteller, s 7 4. Orakel, s 9 5. Stein, saks og papir, s Kompass, s 14

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

Programmeringsspråket C

Sortering med tråder - Quicksort

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

programeksempel Et større En større problemstilling Plan for forelesingen Problemstillingen (en tekstfil) inneholdt ordet "TGA"

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

Sudokubrettet Et sudokubrett består av n n ruter. Vi bruker følgende begreper i oppgaven:

Dagens tema Kapittel 8: Objekter og klasser

Argumenter fra kommandolinjen

Det du skal gjøre i denne oppgava er først å sette opp bakgrunnen til spillet og så rett og slett å få firkanter til å falle over skjermen.

Tetris. Introduksjon. Skrevet av: Kine Gjerstad Eide. Lag starten på ditt eget tetris spill!

Programmeringsspråket C

Eksamen Objektorientert Programmering 2013

UNIVERSITETET I OSLO

Tråder Repetisjon. 9. og 13. mai Tråder

INF1010 våren 2018 tirsdag 23. januar

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Seminaroppgaver IN1010, uke 2

IN våren 2018 Tirsdag 16. januar

UNIVERSITETET I OSLO

import java.util.arraylist;

IN våren 2019 Onsdag 16. januar

Oppgavesett for NVivo 9

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

INF Notater. Veronika Heimsbakk 10. juni 2012

UNIVERSITETET I OSLO

Tråder Repetisjon. 9. og 13. mai Tråder

I skjermbildet for Innstillinger er det 4 parametere som skal registreres. Disse parameterne er:

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Kom i gang med. Åpne nettleseren, gå til: Velg «New Project».

INF Obligatorisk innlevering 6

Komme igang med App Inventor Introduksjon App Inventor PDF

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

UNIVERSITETET I OSLO

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

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

EKSAMEN OBJEKTORIENTERT PROGRAMMERING Alle trykte og skrevne. Java API dokumentasjon er tilgjengelig lokalt på hver maskin.

Layout og publisering

BRUK AV TiSferaDesign I RINGETABLÅER MED ELEKTRONISK NAVNELISTE:

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

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

UNIVERSITETET I OSLO

Kapittel 8: Programutvikling

Velkommen til. INF våren 2016

Løsning av temperatur- regulering med USB Lager et C#-program for å teste. Se prosjekt NI_DAQ_Control_1

Programmeringsspråket C

Objektorientert Programmering Ekstraordinær eksamen 2014

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

INF Våren Li' repe$sjon om Tråder og GUI. Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo. Ins$tu' for informa$kk

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

VMware Horizon View Client. Brukerveiledning for nedlasting, installasjon og pålogging for fjerntilgang

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; }

Om du allerede kjenner Scratch og har en Scratchbruker kan du gå videre til Steg 1.

I et Java-program må programmøren lage og starte hver tråd som programmet bruker. Er dette korrekt? Velg ett alternativ

Lagring i Linux. 1. Hvordan lagre tekst. Når du er ferdig med heftet skal du:

Enkel app-programmering med JavaFX og FXML

Generiske mekanismer i statisk typede programmeringsspråk

Transkript:

Program delegate Kommunikasjon mellom objekter er en utfordring i objektorientert programmering. Dette GUI eksempelet viser hvordan bruke en delegate til å gjøre metodekall i et annet objekt. Vi skal legge en klasse på en egen fil med en metode som er en tråd. Denne tråden skal skrive ut tall i labellen på formen. Dette innebærer at tråden må kunne kommunisere med labellen i klassen Form1. For å få til dette bruker vi en delegate. Lage et nytt prosjekt i Visual Studio 1. Start Visual Studio 2. Velg Create: Project 3. Du får opp en dialogboks. Velg Project type: Visual C++ og CLR Template: Windows Form Application 4. Skriv navn på prosjektet Name: delegategui 5. Gi katalog prosjektet skal ligge Location: c:\projects

Lage formen Lag en form med følgende utseende. På formen legges en labell og en button. Lage en metode for knappen Dobbeltklikk på knappen på formen. Det blir nå knyttet en metode til knappen som heter button1_click() Lage en metode som kalles når formen avsluttes Når programmet avsluttes må tråden også avsluttes. Hvis ikke tråden avsluttes fortseter den å være i minnet helt til datamaskinen skrues av. Så lenge tråden er i minnet kan vi ikke kompilere programmet på ny. Gå tilbake til formen ved å klikke på tabben Form1.h[Design]*. Klikk på formen med venstre mustast for å få fram Properties for Form1. Klikk på Events knappen øverst på Properties (gult lyn). Dobbeltklikk på FormClosing (under Behavior). Du har nå fått en metode som kalles når programmet avsluttes private: System::Void Form1_FormClosing( )

Lage en klasse med tråden Vi skal nå lage en klasse med tråden. Denne klassen skal ligge på en egen fil. Gå på menyen i Visual Studio og velg Project Add New Item I dialogboksen velg Visual C++ Code Header File (.h) Gi filen navn Name: Traad.h Legg følgende kode på filen Traad.h //////////////////////////////////////////////////////////// //Kode på filen Traad.h #include "stdafx.h" using namespace System; using namespace System::Threading; public ref class Traad public: delegate void utskriftdelegate(int); // Har deklarert en delegate. // void angir at metoden ikke returnerer noe. // int angir at metoden har en parameter som er integer. static utskriftdelegate^ utskrift; // Delarerer en peker av typen utskriftsdelegate. // delegate objektet opprettes i initialiser() på Form1.h public: static void traadfunk() // Metoden til tråden. // Denne metoden skriver ut tall i labellen på formen. int teller = 0; while(true) Thread::Sleep(500); // Venter 0.5 sekund

; try utskrift(teller++); // Kaller delegaten catch (Exception^ ) // hvis ikke får tak i label1 Legge en include på filen Form1.h For at programmet på filen Form1. h skal kunne nå koden på Traad.h må filen inkluderes. Legg følgende include øverst på filen Form1. h #pragma once // fra før #include "Traad.h" Kode nederst i class Form1 på filen Form1.h Legg følgende kode nederst i class Form1 på filen Form1.h Start etter pragma endregion. #pragma endregion // fra før /////////////////////////////////// Traad^ traadobj; Thread^ traad; private: void initialiser() // Lager et nytt tråd objekt traadobj = gcnew Traad(); // kalles fra konstruktøren til Form1 // Lager delegaten i objektet traadobj traadobj->utskrift = gcnew Traad::utskriftDelegate(this, &Form1::utskrift); private: void utskrift(int teller) // Skriver ut variabelen teller i label1 label1->text = teller.tostring();

private: System::Void button1_click(system::object^ sender, System::EventArgs^ e) // Metoden til knappen. Her startes tråden. ThreadStart^ threaddelegate = gcnew ThreadStart(traadObj->traadFunk); traad = gcnew Thread(threadDelegate); traad->start(); private: System::Void Form1_FormClosing(System::Object^ sender, System::Windows::Forms::FormClosingEventArgs^ e) // Her fjernes tråden fra minnet. // Ellers går det ikke å endre koden og kompilere på ny // uten å restarte maskinen. traad->abort(); Kalle metoden initialiser() i konstruktøren Metoden initialiser() skal kalles i konstruktøren til Form1 (øverst på filen Form1.h). Føy til dette kallet nederst i konstruktøren. Form1(void) InitializeComponent(); // //TODO: Add the constructor code here // initialiser(); Kompilere og kjøre programmet Programmet er nå klart for uttesting. Trykk Ctrl + F5 for å kompilere og kjøre programmet. Klikk på knappen for å starte tråden.