[so] tema 3
Cibu Cristian
so@atlantis.cs.pub.ro
Sun, 23 Nov 2003 19:25:52 +0200
This is a multi-part message in MIME format.
------=_NextPart_000_001F_01C3B1F7.9BA70A80
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
libraria noastra cuprinde functii pentru monitoare. ok. dar pentru un =
singur monitor sau pot sa fie oricate?
adica: exista un grup de procese care reprezinta o aplicatie. acestea =
folosesc un monitor. nu pot exista si alte grupuri de procese care sa =
aiba nevoie de mecanismul de monitor sau o aceiasi aplicatie sa aiba =
nevoie de mai multe monitoare? presupun ca da, si libraria noastra sa le =
poata deservii pe toate. altfel nu vad ce rol are parametrul Monitor * =
in toate functiile cerute.
apoi, de ce este nevoie de un Monitor *? ce nevoie are o aplicatie sa =
stie exact ce e acela un monitor? stie de concept, stie ce functii pune =
la dispozitie libraria si ii este de ajuns. ce vreau eu sa zic este, nu =
putem inlocui acel Monitor* cu un int? un fel de monitor descriptor =
(analogie cu file descriptor).
apoi, un proces creaza monitorul. ok, are un handle la el (int sau =
Monitor *, nu conteaza) si face treaba cu el.
celelalte procese cum procedeaza? pentru ca nu vad alta functie =
asemanatoare cu create sau init ar trebui sa creeze el din nou monitorul =
respectiv (adica din ou create). am putea face o chestie asemanatoare cu =
MONITOR_CREATE | MONITOR_EXCLUSIVE la creare care sa returneze eroare =
daca exista deja monitorul care voria sa fie creat.
si asa ajung la o alta chestiune. ar trebui ca la crearea monitorului sa =
se furnizeze si un identificator, o semnatura a aplicatiei, etc. o =
chestie prin care sa se identifica monitorul in afara librariei. adica e =
nevoie de un parametru extern pentru ca mecanismul CreateMonitor open =
Monitor sa functioneze (analogie cu orice alta pereche Create / Open din =
windows).=20
si ca sa fim consecventi ideii din windows, destroy nu ar sterge pur si =
simplu monitorul ci doar ar marca renuntarea unui proces la serviciile =
lui. cand monitorul nu mai este folosit de nimeni (folosit nu inseamna =
toate cozile din el goale) s-ar sterge efectiv monitorul.
sper ca m-am exprimat destul de clar ca sa se poate intelege ce am vrut =
sa spun.=20
deci, ce intreb eu:
1. librarie monitor =3D un obiect monitor sau mai multe obiecte monitor
2. se poate inlocui Monitor* cu int
3. se poate adapta create la CreateMonitor si OpenMonitor si deci =
adaugarea unui parametru in plus
------=_NextPart_000_001F_01C3B1F7.9BA70A80
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1">
<META content=3D"MSHTML 6.00.2600.0" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT face=3DArial size=3D2>
<DIV><FONT face=3DArial size=3D2>libraria noastra cuprinde functii =
pentru monitoare.=20
ok. dar pentru un singur monitor sau pot sa fie oricate?</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>adica: exista un grup de procese care =
reprezinta o=20
aplicatie. acestea folosesc un monitor. nu pot exista si alte grupuri de =
procese=20
care sa aiba nevoie de mecanismul de monitor sau o aceiasi aplicatie sa =
aiba=20
nevoie de mai multe monitoare? presupun ca da, si libraria noastra sa le =
poata=20
deservii pe toate. altfel nu vad ce rol are parametrul Monitor * in =
toate=20
functiile cerute.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>apoi, de ce este nevoie de un Monitor =
*? ce nevoie=20
are o aplicatie sa stie exact ce e acela un monitor? stie de concept, =
stie ce=20
functii pune la dispozitie libraria si ii este de ajuns. ce vreau eu sa =
zic=20
este, nu putem inlocui acel Monitor* cu un int? un fel de monitor =
descriptor=20
(analogie cu file descriptor).</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>apoi, un proces creaza monitorul. ok, =
are un handle=20
la el (int sau Monitor *, nu conteaza) si face treaba cu =
el.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>celelalte procese cum procedeaza? =
pentru ca nu vad=20
alta functie asemanatoare cu create sau init ar trebui sa creeze el din =
nou=20
monitorul respectiv (adica din ou create). am putea face o chestie =
asemanatoare=20
cu MONITOR_CREATE | MONITOR_EXCLUSIVE la creare care sa returneze eroare =
daca=20
exista deja monitorul care voria sa fie creat.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>si asa ajung la o alta chestiune. ar =
trebui ca la=20
crearea monitorului sa se furnizeze si un identificator, o semnatura a=20
aplicatiei, etc. o chestie prin care sa se identifica monitorul in afara =
librariei. adica e nevoie de un parametru extern pentru ca mecanismul=20
CreateMonitor open Monitor sa functioneze (analogie cu orice alta =
pereche Create=20
/ Open din windows). </FONT></DIV>
<DIV><FONT face=3DArial size=3D2>si ca sa fim consecventi ideii din =
windows, destroy=20
nu ar sterge pur si simplu monitorul ci doar ar marca renuntarea unui =
proces la=20
serviciile lui. cand monitorul nu mai este folosit de nimeni (folosit nu =
inseamna toate cozile din el goale) s-ar sterge efectiv =
monitorul.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>sper ca m-am exprimat destul de clar ca =
sa se poate=20
intelege ce am vrut sa spun. </FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>deci, ce intreb eu:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>1. librarie monitor =3D un obiect =
monitor sau mai=20
multe obiecte monitor</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>2. se poate inlocui Monitor* cu =
int</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>3. se poate adapta create la =
CreateMonitor si=20
OpenMonitor si deci adaugarea unui parametru in=20
plus</FONT></DIV></FONT></DIV></BODY></HTML>
------=_NextPart_000_001F_01C3B1F7.9BA70A80--