J'ai un driver de peripherique stocké dans une classe : Driver
J'ai une classe gestionnaire de periph appelée par les
differentes threads : DM
Un thread demande l'acces au driver et recoit une clef
qui l'identifie comme propriétaire
en cours de route la clef peut etre invalidée pcq un process
prioritaire a pris la main sur le driver
j'ai donc une fonction
Driver * DM(int key);
si la clef est valide le device manager renvoie le pointeur sur le driver
sinon il lance une exception
--- il me semble que ce systeme est correct en tout cas si vous avez meilleure idée !! je suis preneur ---
Mon probleme est le suivant, en cas d'export du code
et d'utilisation par une tierce personne pressée
il suffit d'ecrire :
au lieu de
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 int key = DM::GetKey(); Driver * t = DM::Driver(key) t->Truc() t->Bidule()
ou la si la fonction a perdu la main entre truc et bidule
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int key = DM::GetKey(); DM::Driver(key)->Truc() DM::Driver(key)->Bidule()
DM peut lancer une exception
alors qu'en sauvegardant l'acces dans une variable
ce n'est pas verifié et le peripherique va peter
l'ideal serait que seul le device manager puisse activer la fonction
de maniere indirecte (il suffirait qu'il soit friend de Driver) mais je ne vois pas comment faire
[Balises CODE rajoutées par Loulou24, merci d'y penser à l'avenir]
Partager