Events asynchrones en C++
Bonjour,
Je fais un jeu complexe et multithread�. J'ai d�cid� de faire communiquer les diff�rents threads de mani�re asynchrone et g�n�rique par un syst�me d'events. Mais j'ai l'impression d'avoir construit une usine a gaz, et j'ai peur que la performance finale ne soit tr�s affect�e par ce syst�me.
Les particularit�s de mes besoins sont qu'un m�me event doit pouvoir �tre multicast� sur plusieurs threads diff�rents, et doit �tre effac� proprement quand tout le monde l'a trait�.
Je suis donc parti sur une classe Event qui ressemble a cela :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| class Event
{
private:
unsigned m_refCount;
protected:
Event();
virtual ~Event();
public:
void grab();
void release();
unsigned getCount();
}; |
je d�rive ensuite event autant que n�cessaire :
Code:
1 2 3 4 5
| class InputEvent : public Event;
class KeyboardEvent : public InputEvent;
class KeyboardKeyEvent : public KeyboardEvent;
class GameEvent : public Event;
... |
Je cr�� ensuite des classes EventReceiver et EventSender afin de g�rer le routage et le stockage des events, ainsi que le comptage des r�f�rence. Elles seront templat�es afin que la file puisse ne traiter qu'une cat�gorie d'events plus ou moins pr�cise.
Quand je recois un event, j'utilise typeid et dynamic_cast pour r�cup�rer les informations.
Ce design est id�al en terme de fonctionnalit�s, je sais que ce syst�me d'events s'adaptera � tout ce que je vais lui balancer. par contre, entre le RTTI (dynamic_cast, destructeur virtuel) et le comptage de r�f�rences, j'ai bien peur que ca ne soit beaucoup trop intensif. Il y a aussi le probl�me de la fragmentation m�moire, car j'aurais beaucoup d'events cr��s et d�truits. Je pensais utiliser un allocateur pour limiter les d�g�ts.
D'une mani�re g�n�rale, mon approche est elle r�aliste ? Existe t il des optimisations afin d�all�ger la charge ? Qu'utilisez vous pour transmettre des informations entre threads dans des programmes complexes ?