2010-03-10 5 views
9

신호와 슬롯을 사용하여 5-10 개의 계층화 된 객체를 위/아래로 전달하려고합니다. 초당 수천 개의 신호가 발생합니다. 어느 쪽이 "나는 버튼을 클릭했다"는 형태이다. 내 모든 물체는 또한 약 100ms마다 타이머로 스스로 신호를 보내서 처리를 할 수 있습니다.종속성없는 가장 빠른 C++ 신호/슬롯 립

가장 빠른 C++ 신호/슬롯 구현 작은 및 부스트와 같은 다른 라이브러리를 필요로하지 않을 것입니다 무엇. (저는 바이너리의 크기를 아주 작게 유지해야합니다).

+2

중요한 질문 : 스레드 안전해야합니까? –

답변

4

내가 libSigC++, sigSlot, CPP-이벤트를 보았다

는 종종 라이브러리가 아니라 마음에 무거운 성능, 사용의 용이성을 위해 설계되었습니다 신호. 빠른 실행을 원할 때 article이 도움이되는지 확인할 수 있습니다.

나는 당신의 경우에 sigslot과 같이 간단한 것을 시도하기 시작할 것입니다. 하지만 이런 상황에서 신호 라이브러리를 사용하지는 않을 것입니다 ... 어떤 종류의 타임 스탬프가 포함 된 메시지 대기열 일 수 있습니다.

0

대부분의 복잡하고 기능이 풍부한 신호/슬롯 라이브러리도 매우 가볍습니다. 신호 방출 속도는 대부분 가상 함수 호출과 유사합니다. boost :: signals 및 libsigC++와 같은 템플릿 기반 라이브러리의 경우 함수 포인터를 전달할 때와 본질적으로 동일한 성능을 얻습니다.

+0

신호를 호출하는 것은 스레드로부터 안전하지 않은 라이브러리를 사용하는 경우에만 빠릅니다. 그리고 연결/연결 해제를 완전히 무시하지는 않을 것입니다. 그 중 일부는 값 비싼 작업입니다. –

5

는 pbhogan에 의한 신호에 대해 어떻게 :

그것은 슈퍼 빨리

https://github.com/pbhogan/Signals

은 (돈 Clugston에 의해 작성된 FastDelegate 코드 사용 - 또한 이스마엘 언급을), 그것은 사용하기 매우 쉽습니다. 나는 그것을 얼마 동안 사용해 왔고 아무런 문제가 없었다.

+1

이것이 중요한지는 모르지만이 구현은 스레드로부터 안전하지 않습니다. – Eric

+0

@ 에릭 - 사실, 스레드 안전 버전을 만들기 위해 더 많은 작업을해야하고, 성능이 좋지 않을 수 있습니다. – sidewinderguy

+0

잘 모르겠습니다. 스레드를 안전하게 만드는 데 더 많은 작업이 필요할 경우 스레드로부터 안전하지 않습니다. 스레드 안전을 보장 할 수 없다고 결코 말한 적이 없습니다. 귀하의 게시물에서이 라이브러리를 발견했는데, 그것을 보았을 때, 나는 불쾌한 템플릿과 Delegate 클래스를 매우 상실했습니다. 버그가 많은 컴파일러를 사용하여 ASM의 두 줄을 처리하기 위해 일하는 많은 부두처럼 보입니다. 나는 그것을보고 놀 것이다. 그러나 이것은 나에게 디버그 악몽을 비명을 지른다. – Eric