Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Symbian ohjelmointi Ti5315200 Symbian ohjelmointi 5. harjoitus Juha Turunen

Samankaltaiset esitykset


Esitys aiheesta: "Symbian ohjelmointi Ti5315200 Symbian ohjelmointi 5. harjoitus Juha Turunen"— Esityksen transkriptio:

1 Symbian ohjelmointi Ti5315200 Symbian ohjelmointi 5. harjoitus Juha Turunen (juha.turunen@lut.fi)

2 Sisältö Active object framework

3 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

4 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

5 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 event virtual void RunL() =0; // Handle an Event virtual TInt RunError(TInt aError); private: TBool iActive; };

6 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

7 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()

8 Active object elinkaari Application 2. Create AO & issue request & add to Active Scheduler Active Object 5. Start Active Scheduler Active Scheduler 3. Issues request function set 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)

9 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 Notifier Observer1 Observer2Observer interface > Ei näin Vaan näin

10 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.

11 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


Lataa ppt "Symbian ohjelmointi Ti5315200 Symbian ohjelmointi 5. harjoitus Juha Turunen"

Samankaltaiset esitykset


Iklan oleh Google