2010-03-10 9 views
9

Ich werde Daten über 5-10-Layer-Objekt nach oben/unten mit Signalen und Slots übergeben. Was zu ein paar tausend Signal pro Sekunde führen sollte. Was weit weg ist "Ich habe einen Knopf gedrückt". Alle meine Objekte werden sich auch selbst über einen Timer alle 100ms signalisieren, damit sie etwas verarbeiten können.Schnellste C++ - Signal/Slot-Lib ohne Abhängigkeit

Was wäre die schnellste C++ Signal/Slot-Implementierung, die klein wäre und keine andere Bibliothek wie Boost erfordern würde. (Ich muss die Gesamtgröße meiner Binärdatei sehr klein halten).

I libsigC++, sigSlot, Cpp-Veranstaltungen,

+2

IMO wichtige Frage: Muss es threadsicher sein? –

Antwort

4

Oft gesehen haben signalisieren Bibliotheken für eine einfache Nutzung ausgelegt sind, und nicht mit einer schweren Leistung im Auge behalten. Sie können dies überprüfen article vielleicht hilfreich bei der Verfolgung schneller Ausführung.

In Ihrem Fall würde ich versuchen, die einfachere, wie sigslot. Aber ich würde unter solchen Umständen keine Signalbibliothek verwenden ... wahrscheinlich eine Art Nachrichtenwarteschlange mit einem Zeitstempel.

0

Selbst die komplexesten und funktionsreichsten Signal/Slot-Bibliotheken sind recht leicht. Die Geschwindigkeit der Signalabgabe ist in den meisten Fällen vergleichbar mit einem virtuellen Funktionsaufruf. Im Falle von Template-gesteuerten Bibliotheken wie boost :: signals und libsigC++ erhalten Sie im Wesentlichen die gleiche Leistung, die Sie bei der Übergabe von Funktionszeigern erhalten würden.

+0

Das Aufrufen von Signalen erfolgt nur bei Bibliotheken, die nicht threadsicher sind. Und ich würde das Verbinden/Trennen auch nicht völlig ignorieren, es gibt einige Bibliotheken, in denen das ziemlich teure Operationen sind. –

5

Wie wäre es Signale, die von pbhogan:

https://github.com/pbhogan/Signals

Es super schnell ist (verwendet den FastDelegate Code von Don Clugston geschrieben - auch von Ismael erwähnt), und es ist ziemlich einfach zu bedienen. Ich benutze es seit einiger Zeit und hatte keine Probleme.

+1

nicht sicher, ob das wichtig ist oder nicht, aber diese Implementierung ist nicht threadsicher. – Eric

+0

@Eric - das stimmt, es müsste mehr Arbeit aufgewendet werden, um eine thread-sichere Version zu erstellen, und es könnte sich schlecht entwickeln. – sidewinderguy

+0

Nicht sicher, dass ich dir folge. Wenn mehr Arbeit nötig wäre, um es threadsicher zu machen, dann ist es nicht threadsicher. Ich habe nie behauptet, dass es nicht threadsicher gemacht werden kann. Ich habe diese Bibliothek von deinem Beitrag bemerkt, und als ich es mir anschaute, war ich sehr entmutigt von der fiesen Vorlage und der hackigen Delegiertenklasse. Sieht aus wie viel Voodoo bei der Arbeit, um Buggy-Compiler zu umgehen, um auf zwei ASM-Zeilen zu kommen. Ich werde damit spielen, um zu sehen, aber das schreit nur Debug Albtraum für mich. – Eric

Verwandte Themen