2010-03-10 11 views
9

Ho intenzione di passare i dati su/giù su un oggetto a 5-10 livelli utilizzando segnali e slot. Il che dovrebbe portare a qualche migliaio di segnali al secondo. Che è lontano dalla forma "Ho cliccato un pulsante". Tutti i miei oggetti li segnaleranno anche su un timer circa ogni 100ms in modo che possano fare un po 'di elaborazione.Fast + C++ Segnale/Slot Lib senza dipendenza

Quale sarebbe l'implementazione di segnale/slot C++ più veloce che sarebbe piccola e non richiedere altre librerie come boost. (Devo mantenere la dimensione totale del mio Binario molto piccola).

ho visto libSigC++, sigSlot, CPP-Events,

+2

IMO domanda importante: deve essere thread-safe? –

risposta

4

segnale Spesso le biblioteche sono progettati per facilità di utilizzo, e non con una performance pesante in mente. È possibile controllare questo article forse utile mentre si esegue l'esecuzione veloce.

Nel tuo caso inizierei a provare il più semplice, come sigslot. Ma non userei una libreria di segnali in tali circostanze ... probabilmente una sorta di coda di messaggi, con una data/ora di qualche tipo.

0

Anche le librerie di segnale/slot più complesse e ricche di funzionalità sono piuttosto leggere. Nella maggior parte dei casi, la velocità di emissione del segnale è paragonabile alla chiamata di funzione virtuale. Nel caso di librerie basate su template come boost :: signals e libsigC++ si ottiene essenzialmente la stessa performance di quella che si otterrebbe passando i puntatori di funzione.

+0

Invocare i segnali è veloce solo con le librerie che non sono thread-safe. E non ignorerei del tutto la connessione/disconnessione, ci sono alcune librerie in cui quelle sono operazioni piuttosto costose. –

5

ne dite di segnali via pbhogan:

https://github.com/pbhogan/Signals

E 'super veloce (utilizza il codice FastDelegate scritto da Don Clugston - citato anche da Ismael), ed è abbastanza facile da usare. Lo sto usando da un po 'di tempo e non ho avuto problemi.

+1

non sono sicuro se questo è importante o meno, ma questa implementazione non è thread-safe. – Eric

+0

@Eric: è vero, più lavoro dovrebbe essere speso per creare una versione thread-safe, e potrebbe funzionare male. – sidewinderguy

+0

Non sono sicuro che ti segua. Se fosse necessario più lavoro per renderlo thread-safe, allora non è thread-safe .... Non ho mai dichiarato che non possa essere reso thread-safe. Ho notato questa libreria dal tuo post e quando l'ho guardata, sono stato molto scoraggiato dal brutto modello e dalla classe dei delegati hackish. Sembra un sacco di voodoo al lavoro per aggirare i compilatori buggy per arrivare a due righe di ASM. Ci giocherò per vederlo, ma questo mi fa urlare l'incubo di debug. – Eric