signal과 slot, 그리고 jl_signal 라이브러리

23
signal-slot-benchmarks https://github.com/NoAvailableAlias/signal-slot-benchmarks

Upload: jongsung-hwang

Post on 06-Jan-2017

1.137 views

Category:

Software


5 download

TRANSCRIPT

Page 1: signal과 slot, 그리고 jl_signal 라이브러리

signal-slot-benchmarkshttps://github.com/NoAvailableAlias/signal-slot-benchmarks

Page 2: signal과 slot, 그리고 jl_signal 라이브러리

signal? slot?

Page 3: signal과 slot, 그리고 jl_signal 라이브러리

Observer pattern1. 한 객체의 상태가 변경

2. 해당 객체에 의존하는 다른 객체들에게 자동으로 연락

Page 4: signal과 slot, 그리고 jl_signal 라이브러리

Qt 라이브러리에서 signal, slot 이라는 개념을 내놓게 됨 자신의 내부 상태가 변경되었다면 시그널을 발생시키게 됨 필요한 곳에서 슬롯으로 시그널을 수신

Page 5: signal과 slot, 그리고 jl_signal 라이브러리
Page 6: signal과 slot, 그리고 jl_signal 라이브러리

qt 라이브러리를 논하지 않는 것은 레이싱카를 비교할 때

페라리를 빼놓고 비교하는 것과 마찬가지

Page 7: signal과 slot, 그리고 jl_signal 라이브러리

QT Signal Slot

Page 8: signal과 slot, 그리고 jl_signal 라이브러리
Page 9: signal과 slot, 그리고 jl_signal 라이브러리

Signals 객체의 내부 상태가 변화하게 되면 signal 이 객체에 의해서 Emit signal 이 emit 되면 , 해당 signal 에 연결된 slot 들은 일반 함수가 호출되듯이 즉시 실행 이 과정은 GUI 이벤트 루프와 완전히 독립적으로 동작 여러 Slot 들이 하나의 signal 에 연결되어 있다면 , slot 들은 connect 된 순서대로 실행 signal 은 public 함수이기에 어디서든 emit 될 수 있지만 , 해당 signal 을 정의한 객체 내에서 emit 하는 것을 추천

Page 10: signal과 slot, 그리고 jl_signal 라이브러리

Slot slot 들은 연결된 signal 들이 emit 될 때 호출됩니다 . slot 들은 일반 C++ 함수들이며 , 일반 함수와 마찬가지로 호출됩니다 . 일반 함수와의 유일한 차이점은 signal 들이 해당 함수들에 connect 될 수 있다는 것입니다 .

Page 11: signal과 slot, 그리고 jl_signal 라이브러리
Page 12: signal과 slot, 그리고 jl_signal 라이브러리
Page 13: signal과 slot, 그리고 jl_signal 라이브러리

jeffomatic jl_signal

Page 14: signal과 slot, 그리고 jl_signal 라이브러리

가장 평가가 좋은 signal slot 라이브러리 사용법이 간단

Page 15: signal과 slot, 그리고 jl_signal 라이브러리

Signal 객체를 선언하는 방법

1 번 방법은 2 번 객체를 매크로로 감싸서 사용하기 편하게 만든 것 3 번은 template 으로 구현되어 있으나 , variadic 을 사용하지는 않았음

Page 16: signal과 slot, 그리고 jl_signal 라이브러리

Signal 객체와 slot 을 연결

jl::Signal 객체에 connect 되는 slot 의 반환형은 반드시 void 여야 함 기존 QT 라이브러리의 경우 emit 되는 값이 slot 에서 받는 매개변수의 수보다 많은 경우 초과되는 매개변수가 무시 jl_signal 라이브러리에서는 slot 의 시그니쳐를 엄격히 지켜야 함

Page 17: signal과 slot, 그리고 jl_signal 라이브러리

Signal 객체와 slot 을 연결 옵저버 객체는 반드시

jl::SignalObserver 객체 상속 해당 객체를 상속받는 객체는 scope 를 벗어나 소멸될 때 자동으로 disconnect

Page 18: signal과 slot, 그리고 jl_signal 라이브러리

Emit

Emit 함수를 사용하거나 () 연산자를 사용하여 emit 가능

Page 19: signal과 slot, 그리고 jl_signal 라이브러리

Disconnect SignalObserver 가 소멸될 때 DisconnectAllSignals 함수를 호출 연결된 signal 을 모두 해제 강제적으로 connection 을 끊을 때에는 jl::Signal 객체의 Disconnect 멤버 함수를 사용

Page 20: signal과 slot, 그리고 jl_signal 라이브러리

Wizard 객체는 sig-nal 을 emit 하는 클래스

Orc, Prop, Hipster-ByStander 는 signal을 수신

Page 21: signal과 slot, 그리고 jl_signal 라이브러리

jl::SignalObserver 객체를 상속받는 것을 확인

Page 22: signal과 slot, 그리고 jl_signal 라이브러리

public 내에 jl::Signal 객체 생성 Emit 함수는 Wizard 내에서 호출

Page 23: signal과 slot, 그리고 jl_signal 라이브러리