symbian ohjelmointi

11
Symbian ohjelmointi Ti5315200 Symbian ohjelmointi 5. harjoitus Juha Turunen ([email protected])

Upload: mills

Post on 04-Jan-2016

40 views

Category:

Documents


0 download

DESCRIPTION

Symbian ohjelmointi. Ti5315200 Symbian ohjelmointi 5. harjoitus Juha Turunen ([email protected]). Sisältö. Active object framework. Active object framework. Symbian OS on luonteeltaan asynkroninen Suurin osa ajasta kuluu käyttäjän tai järjestelmätapahtumien odottamiseen Idle state - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Symbian ohjelmointi

Symbian ohjelmointi

Ti5315200 Symbian ohjelmointi

5. harjoitus

Juha Turunen ([email protected])

Page 2: Symbian ohjelmointi

Sisältö

• Active object framework

Page 3: Symbian ohjelmointi

Active object framework

• Symbian OS on luonteeltaan asynkroninen– Suurin osa ajasta kuluu käyttäjän tai

järjestelmätapahtumien odottamiseen• Idle state

• Active objectit tarjoavat tavan moniajaa säikeen (thread) sisällä– Vähemmän säikeitä => turvallisempaa koodia,

vähemmän kulutettuja järjestelmäresursseja• Yhteistyömoniajo• Kapseloi perinteisen event loopin

Page 4: Symbian ohjelmointi

Active object framework luokat

• CActive– Kapseloi pyynnön– Kapseloi pyynnön valmistumisen käsittelyn– Kapseloi pyynnön peruuttamisen– TRequestStatus

• CActiveScheduler– Kapseloi wait loopin– Yksi per säie– Prioriteetit– Ajaa jokaista active objectia (jolla on valmistunut

pyyntö) vuorollaan

Page 5: Symbian ohjelmointi

CActive

• Kaikkien active objectien kantaluokka

class CActive : public CBase {public:

void Cancel(); // Cancel outstanding wait void SetPriority(TInt aPriority); TInt Priority() const;TRequestStatus iStatus;

protected:CActive(TInt aPriority);void SetActive();virtual void DoCancel() =0; // Cancel eventvirtual void RunL() =0; // Handle an Eventvirtual TInt RunError(TInt aError);

private:TBool iActive;

};

Page 6: Symbian ohjelmointi

Valmiita active objecteja

• CIdle– Jatkuvan tausta-ajon toteuttamista varten– Esim. iso laskenta operaatio mikä täytyy pystyä

canceloimaan– Kuvitteellinen pyyntö aina valmis

• CPeriodic– Ajastin

• CHeartbeat– Kuten CPeriodic, mutta sisältää synkronointi

mahdollisuuden

Page 7: Symbian ohjelmointi

DIY Active object

• Peri CActive luokka• Toteuta DoCancel() ja RunL()

– Yleensä RunL:stä kutsutaan jotain abstraktia rajapintaa (observer)

• Toteuta RunError() mikäli virhekäsittelyä tarvitaan• Määrittele ja toteuta metodit, joilla tehdään pyyntö

– SetActive()– Tee asynkroninen pyyntö

• iStatus• Luo instanssi ja lisää se ActiveScheduleriin

– CActiveScheduler::Add()

Page 8: Symbian ohjelmointi

Active object elinkaari

Application

2. Create AO & issue request& add to Active Scheduler

Active Object

5. Start Active Scheduler

Active Scheduler

3. Issues request functionset iActive true

Service Provider

4. set object’s iStatus to KRequestPending

6. request completed: reset object’s iStatus e.g. KErrNone

5. WaitForAnyRequest()

1. Create and Install Active Scheduler

7. call AO’s RunL()8. RunL() function re-issues request or stops active scheduler

Cleanup and terminate

Key

Procedural flow:

Control transferred:

(asynchronous)

(service runs and completes)

Page 9: Symbian ohjelmointi

Observer pattern

• Observer pattern toteuttaa yksi moneen suhteen olioiden välillä

• Olio viestittää observer olioille (tai oliolle) oman tilansa muuttumisesta

• Jos viestittävään luokkaan olisi kovakoodattu konkreetit observer luokat, olisi viestittävä luokan laajentaminen työlästä ja sidottua tiettyyn oliomalliin

• Määrittelemällä observereille abstrakti rajapinta

Notifier

Observer1

Observer2

NotifierObserver1

Observer2Observer interface<<inherits>>

Ei näinVaan näin

Page 10: Symbian ohjelmointi

Harjoitustehtävä

• Tehtävänä on tehdä active object, joka tekee asynkronisen pyynnön RTimer luokkaa käyttäen

• Active object luokka viestii observer rajapinnan kautta toiselle oliolle pyynnön valmistumisesta– Monikäyttöisyys

• Huomaa, että normaalisti vastaavanlaisen asynkronisen viiveen voi hoitaa näppärästi CPeriodic tai CTimer luokkaa käyttämällä, mutta tässä harjoituksessa teemme active objectin itse

• Jos esim. harjoitustyötä tehdessä tarvitsee käyttää asynkronisia palveluita, hoituu homma samalla. Vain palveluntarjoaja vaihtuu.

Page 11: Symbian ohjelmointi

Ohjeet harjoitustehtävän tekoon

• Aloita luomalla käännösympäristö ja kääntämällä ohjelma• Aja sovellus ja kokeile ensimmäistä menu valintaa (’synchronous’)

– Tutki suoritettavaa koodia (CAOProbAppUI::HandleCommandL)– Kuinka UI toimii synkronisen operaation aikana?

• Täydennä puuttuva koodi CActiveDelay luokan metodeihin• Täydennä puuttuva koodi CAOProbAppUI luokan metodeihin

– ConstructL()– HandleCommandL()

• Kokeile asynkronisia kutsuja (’asynchronous1’ ja ’asynchronous2’ menusta)– Varmista, että eventhandlerit tulostavat info viestit ruudulle

viiveen kuluttua– Kuinka UI toimii asynkronisten kutsujen aikana?– Varmista, että cancel toiminto toimii