2010-03-10 7 views
9

Voy a pasar los datos hacia arriba/abajo de un objeto de 5-10 capas mediante señales y ranuras. Que debería dar como resultado unos miles de señales por segundo. Que está lejos de "hice clic en un botón". Todos mis objetos también se señalizarán a sí mismos en un temporizador cada 100 ms para que puedan procesarlos.La más rápida de la señal/ranura de C++ sin dependencia

Cuál sería la implementación más rápida de la señal/ranura de C++ que sería pequeña y no requeriría otra biblioteca como el impulso. (Necesito mantener el tamaño total de mi Binario muy pequeño).

he visto libsigC++, sigSlot, CPP-Events,

+2

IMO pregunta importante: ¿tiene que ser seguro para subprocesos? –

Respuesta

4

señal de frecuencia bibliotecas están diseñados para facilitar su utilización, y no con un fuerte rendimiento en mente. Puede verificar que article sea útil mientras persigue una ejecución rápida.

En su caso, comenzaría a probar el más simple, como sigslot. Pero no utilizaría una biblioteca de señales en tales circunstancias ... probablemente algún tipo de cola de mensajes, con una marca de tiempo de algún tipo.

0

Incluso las bibliotecas de señales/ranuras más complejas y con muchas funciones son bastante livianas. La velocidad de emisión de la señal es en la mayoría de los casos comparable a la llamada de función virtual. En el caso de las bibliotecas basadas en plantillas, como boost :: signals y libsigC++, se obtiene esencialmente el mismo rendimiento que se obtendría al pasar los punteros a las funciones.

+0

La invocación de señales solo es rápida con bibliotecas que no son seguras para subprocesos. Y tampoco ignoraría completamente la conexión/desconexión, hay algunas bibliotecas donde esas son operaciones bastante caras. –

5

¿Qué hay de señales por pbhogan:

https://github.com/pbhogan/Signals

Es súper rápido (utiliza el código FastDelegate escrito por Don Clugston - también mencionado por Ismael), y es bastante fácil de usar. Lo he estado usando desde hace un tiempo y no tuve problemas.

+1

no estoy seguro si esto importa o no, pero esta implementación no es segura para subprocesos. – Eric

+0

@Eric: es cierto, habría que gastar más trabajo para hacer una versión segura para subprocesos, y podría funcionar mal. – sidewinderguy

+0

No estoy seguro de que te sigo. Si se necesitara más trabajo para hacerlo seguro, entonces no es seguro para hilos ... Nunca dije que no se pudiera hacer un hilo seguro. Observé esta biblioteca de su publicación y cuando la miré, la desagradable plantilla y la harapienta clase Delegado me desanimaron. Parece que hay muchos vudú en el trabajo que trabajan con los compiladores con errores para llegar a dos líneas de ASM. Jugaré con él para ver, pero esto solo me grita pesadilla de depuración. – Eric

Cuestiones relacionadas