2010-03-10 16 views
9

Je vais transmettre des données de haut en bas d'un objet 5-10 couches en utilisant des signaux et des emplacements. Ce qui devrait aboutir à quelques milliers de signaux par seconde. Ce qui est loin "j'ai cliqué sur un bouton". Tous mes objets vont aussi se signaler à une minuterie toutes les 100ms afin qu'ils puissent faire un peu de traitement. Ce qui serait l'implémentation C++ Signal/Slot la plus rapide qui serait petite et ne nécessiterait pas d'autre bibliothèque comme boost. (J'ai besoin de garder la taille totale de mon binaire très petit).Le plus rapide C++ Signal/Slot Lib sans dépendance

J'ai vu libsigC++, sigSlot, Cpp-Events,

+2

IMO question importante: doit-il être thread sûr? –

Répondre

4

bibliothèques sont souvent un signe conçus pour faciliter l'utilisation, et non avec une performance forte à l'esprit. Vous pouvez vérifier cette article peut-être utile tout en poursuivant l'exécution rapide.

Dans votre cas, je commencerais à essayer le plus simple, comme sigslot. Mais je n'utiliserais pas une bibliothèque de signaux dans de telles circonstances ... probablement une sorte de file d'attente de messages, avec un horodatage quelconque.

0

Même les bibliothèques de signaux/emplacements les plus complexes et riches en fonctionnalités sont assez légères. La vitesse d'émission du signal est dans la plupart des cas comparable à un appel de fonction virtuelle. Dans le cas de bibliothèques gérées par template telles que boost :: signals et libsigC++, vous obtiendrez essentiellement les mêmes performances que si vous passiez des pointeurs de fonction.

+0

L'appel de signaux est rapide uniquement avec les bibliothèques qui ne sont pas sécurisées pour les threads. Et je ne voudrais pas ignorer complètement la connexion/déconnexion non plus, il y a quelques bibliothèques où ce sont des opérations plutôt chères. –

5

Que diriez-vous des signaux par pbhogan:

https://github.com/pbhogan/Signals

Il est super rapide (utilise le code FastDelegate écrit par Don Clugston - également mentionné par Ismael), et il est assez facile à utiliser. Je l'utilise depuis un certain temps et je n'ai eu aucun problème.

+1

ne sait pas si cela compte ou non, mais cette implémentation n'est pas sûre pour les threads. – Eric

+0

@Eric - c'est vrai, plus de travail devrait être dépensé pour faire une version thread-safe, et il pourrait mal fonctionner. – sidewinderguy

+0

Je ne suis pas sûre de vous suivre. Si plus de travail est nécessaire pour sécuriser le filetage, alors ce n'est pas sûr pour les threads ... Je n'ai jamais dit qu'il ne pouvait pas être sécurisé. J'ai remarqué cette bibliothèque dans votre post et quand je l'ai regardé, j'ai été très découragé par le modèle désagréable et la classe délicate des délégués. On dirait qu'il y a beaucoup de vaudou au travail pour contourner les compilateurs buggés pour arriver à deux lignes d'ASM. Je vais jouer avec pour voir, mais cela me crie un cauchemar de débogage. – Eric