Sunteți pe pagina 1din 2

Programarea în Windows

Home / My courses / PWINDOWS / Capitolul 1. Concepte fundamentale. Partea 1 / Cum funcționează PPE

Cum funcționează PPE

Dispecerele de evenimente

Elementul central al unei aplicații pilotate de evenimente este partea programului ce recepționează evenimentele – dispecerul, care transmite
fiecare eveniment handler-ului propriu. Dispecerul rămâne activ până când va întâlni un eveniment (de exemplu, "End_Program") care îl va
determina să închidă aplicația. În anumite circumstanțe, dispecerul poate întâlni un eveniment pentru care nu există un handler adecvat. În funcție
de natura evenimentului, dispecerul poate fie să îl ignore, fie să genereze o excepție. Într-un mediu de programare pilotat de evenimente,
evenimentele standard sunt de obicei identificate utilizând ID-ul obiectului afectat de eveniment (de exemplu, numele unui buton dintr-o formă) și
ID-ul evenimentului (de exemplu, "clic-stânga"). Informația transmisă event-handlerului poate include date suplimentare, cum ar fi
coordonatele x și y ale indicatorului de mouse în momentul producerii evenimentului sau starea tastei Shift, dacă evenimentul în cauză este o
apăsare de tastă sau de buton de mouse.

Ce reprezintă evenimentele

Evenimentele sunt deseori acțiuni efectuate de utilizator în timpul folosirii programului, dar pot fi și mesaje generate de sistemul de operare, de o
altă aplicație sau o întrerupere generată de un dispozitiv periferic sau hardware de sistem. Dacă utilizatorul apasă un buton de mouse sau tasta
Enter, va fi generat un eveniment. Dacă descărcarea unui fișier s-a terminat, aceasta declanșează un eveniment. Dacă există o eroare hardware sau
software, va fi generat un eveniment. Evenimentele sunt gestionate de operatorul central de evenimente (dispecer) - ciclu care rulează continuu în
fundal și așteaptă să se întâmple evenimente. Când are loc un eveniment, dispecerul trebuie să determine tipul evenimentului și să apeleze
handlerul corespunzător. Informațiile transmise de dispecer către event handler vor varia, dar vor include date suficiente pentru a permite codului
de tratare să ia toate măsurile necesare.

Handlerul de eveniment

Handler-ul de eveniment este un mic fragment de cod procedural care tratează evenimentul. De obicei, acesta va produce un răspuns vizual pentru
a informa sau direcționa utilizatorul și poate adesea schimba starea sistemului. Starea sistemului cuprinde atât datele utilizate de sistem (de
exemplu, valoarea unui câmp al BD), cât și starea interfeței utilizatorului (de exemplu, care obiect de pe ecran deține cursorul de intrare sau care
este culoarea de fundal a unei casete de text). Un event-handler poate chiar să declanșeze un alt eveniment care va solicita un alt event-handler
(atenție la bucle infinite). În mod similar, un event-handler poate determina ca în anumite situații așteptarea să fie eliminată (de exemplu, când
utilizatorul face clic pe butonul Quit pentru a închide programul).

Relația dintre evenimente, planificator și operatorii de evenimente

Figura 3 ilustrează relația dintre evenimente, planificator/dispecer și codul care tratează un eveniment.

Fig. 3. Reprezentarea schematică a paradigmei event-driven programming

Pseudo-codul de mai jos ilustrează cum ar putea funcționa un planificator. El este compus dintr-o buclă principală care rulează continuu până când
apare o condiție de terminare. La apariția unui eveniment, planificatorul determină tipul evenimentului și selectează un handler adecvat (sau decide
cum se va proceda, dacă handlerul necesar nu există).

do forever: // the main scheduler loop

   get event from input stream

    if event type == EndProgram:


     else if event type == event_01:

        call event-handler for event_01 with event parameters

     else if event type == event_02:

        call event-handler for event_02 with event parameters

      .

      .

      .

     else if event type == event_nn:

        call event-handler for event_nn with event parameters

     else handle unrecognized event // ignore or raise exception

end loop

Într-o aplicație bazată pe evenimente, mai multe evenimente pot fi declanșate într-un timp relativ scurt. Dispecerul și event-handlerele s-ar putea să
nu face față tuturor evenimentelor imediat ce acestea au fost declanșate. Soluția evidentă este de a plasa evenimentele neprocesate într-un fir de
așteptare până când acestea vor putea fi preluate pentru a fi tratate. Evenimentele sunt introduse în coada firului de așteptare și vor fi preluate de
către planificator odată ce ajung în topul firului. Este posibil să existe și scheme prioritare în care anumite tipuri de evenimente au prioritate față de
altele. Astfel de evenimente vor fi urmărite rapid de dispecer, care le va deplasa în topul firului de așteptare. Poate chiar exista un fir de așteptare
separat pentru evenimentele prioritare. Existența firului de așteptare garantează că toate evenimentele vor fi tratate la un moment dat și într-o
anumită ordine. Lungimea firului și timpul necesar procesării evenimentelor depind de viteza procesorului, capacitatea memoriei operative și
numărul de alte aplicații executate în același timp (nivelul de multitasking - concurența pentru aceleași resurse de sistem). O mare parte din timp,
însă, firul de așteptare este vid și dispecerul va fi în stare de așteptare pentru următorul eveniment.

Last modified: Sunday, 3 May 2020, 8:31 PM

◄ Limbaje de programare pentru PPE Jump to... Domenii de aplicare ►

You are logged in as Mihail Curchi (Log out)


PWINDOWS
Data retention summary
Get the mobile app

S-ar putea să vă placă și