rxcpp를 사용하는 방법을 이해하려고합니다. 관찰 가능 항목이 값을 내면 내 관찰자가 구독자가됩니다. on_next() 메소드가 호출되어 방출 된 값을 전달함으로써 알림을받습니다.rxcpp - 관찰자가 값을 내놓을 때 모든 관찰자의 on_next 함수가 호출되지 않는 이유
auto eventloop = rxcpp::observe_on_event_loop();
printf("Start task\n");
auto values = rxcpp::observable<>::interval(std::chrono::seconds(2)).map(
[](int i){
printf("Observable sending: %d\n", i);
return i;
}
);
values.
subscribe_on(eventloop).
take(2).
as_blocking().
subscribe(
[](int v){printf("#1 onNext: %d\n", v);},
[](){printf("#1 onCompleted\n");});
values.
subscribe_on(eventloop).
take(2).
as_blocking().
subscribe(
[](int v){printf("#2 onNext: %d\n", v);},
[](){printf("#2 onCompleted\n");});
printf("Finish task\n");
I 출력이 같은 것으로 예상 :
이 다음 예제의 경우되지 않습니다
Start task
Observable sending: 1
#1 onNext: 1
#2 onNext: 1
Observable sending: 2
#1 onNext: 2
#1 onCompleted
#2 onNext: 2
#2 onCompleted
Finish task
즉 on_next 새로운 값이 오면 모든 가입 관찰자에 호출되는 을 통하여.
대신, 출력은 실제로 :
는Start task
Observable sending: 1
#1 onNext: 1
Observable sending: 2
#1 onNext: 2
#1 onCompleted
Observable sending: 1
#2 onNext: 1
Observable sending: 2
#2 onNext: 2
#2 onCompleted
Finish task
as_blocking()을 사용하면 주먹이 완료 될 때까지 두 번째 구독이 시작되지 않습니다. –