2010-03-10 7 views
9

Mam zamiar przekazać dane w górę/w dół 5 - warstwowego obiektu za pomocą sygnałów i gniazd. Co powinno dać kilka tysięcy sygnałów na sekundę. Który jest daleko od "kliknąłem przycisk". Cały mój obiekt będzie również sygnalizował je sobie na zegarze około 100 ms, aby można było wykonać pewne przetwarzanie.Najszybszy sygnał C++ sygnału/gniazda bez zależności

Jaka byłaby najszybsza implementacja Signal/Slot C++, która byłaby mała i nie wymaga innej biblioteki, takiej jak boost. (Muszę utrzymać całkowity rozmiar mojego Binary bardzo mały).

Widziałem libSigC++ sigSlot, CPP-Events,

+2

IMO ważne pytanie: czy musi być bezpieczne dla wątków? –

Odpowiedz

4

Często sygnalizować biblioteki są zaprojektowane dla łatwości użytkowania, a nie z ciężkim występ w umyśle. Możesz sprawdzić ten article może być pomocny podczas wykonywania szybkiej realizacji.

W twoim przypadku zacznę próbować prostszego, jak sigslot. Ale w takich okolicznościach nie używałbym biblioteki sygnałów ... prawdopodobnie jakiejś kolejki wiadomości z jakimś znacznikiem czasu.

0

Nawet najbardziej złożone i bogate w funkcje biblioteki sygnałów/gniazd są dość lekkie. Szybkość wysyłania sygnału jest w większości przypadków porównywalna z wirtualnym wywołaniem funkcji. W przypadku bibliotek opartych na szablonach, takich jak boost :: signals i libsigC++, uzyskuje się w zasadzie taką samą wydajność, jak w przypadku przekazywania wskaźników funkcji.

+0

Wywoływanie sygnałów jest szybkie tylko w przypadku bibliotek, które nie są wątkowo bezpieczne. I nie całkowicie ignorowałbym łączenie/rozłączanie, jest też kilka bibliotek, w których są to dość drogie operacje. –

5

Jak o sygnały za pbhogan:

https://github.com/pbhogan/Signals

To super szybki (wykorzystuje kod FastDelegate napisany przez Don Clugston - również wspomniany przez Ismael), a to jest dość łatwy w użyciu. Używam go od jakiegoś czasu i nie miałem żadnych problemów.

+1

Nie jestem pewien, czy to ma znaczenie, czy nie, ale ta implementacja nie jest bezpieczna dla wątków. – Eric

+0

@Eric - to prawda, więcej pracy musiałoby zostać wydane, aby utworzyć wersję wątkową, i może działać źle. – sidewinderguy

+0

Nie jestem pewien, czy podążam za Tobą. Jeśli potrzeba więcej pracy, aby zapewnić bezpieczeństwo wątku, to nie jest to bezpieczne dla wątków. Nigdy nie powiedziałem, że nie można go zabezpieczyć wątkiem. Zauważyłem tę bibliotekę z twojego postu i kiedy spojrzałem na nią, byłem bardzo zniechęcony przez nieprzyjemny szablon i hackową klasę Delegata. Wygląda na to, że dużo voodoo w pracy, aby obejść buggy kompilatory, aby dostać się do dwóch linii ASM. Będę się z nim bawił, ale to tylko krzyczy do mnie z debugowania koszmaru. – Eric