2013-07-24 3 views
2

QstackedWIdget에서 여러 양식이있는 GUI를 만들고 있습니다. 이제이 양식의 데이터를 사용 가능한 경우 업데이트 할 수 있기를 바랍니다. 데이터는 RTI DDS를 통해 수신됩니다. 어떤 사람이 비 GUI 스레드에서 GUI 데이터가 업데이트되는 몇 가지 예제 또는 링크를 제안 할 수 있습니까?Qt 및 RTI DDS 상호 작용 - 일부 지침이 필요합니다.

감사합니다.

답변

2

몇 가지 옵션을 사용할 수 있습니다. 귀하의 질문에서 평가할 수있는 한 귀하의 상황에 가장 적합한 것으로 설명 할 것입니다.

먼저 구독자 측에서는 응용 프로그램과 DDS DataReaders, 즉 폴링, 리스너 및 웨이트 셋 간의 상호 작용이 가능한 세 가지 유형이 있음을 알아야합니다. 폴링은 기본적으로 응용 프로그램이 필요하다고 판단 될 때 (예 : 고정 속도로) DataReader를 쿼리하는 것을 의미합니다. 리스너를 사용한다는 것은 애플리케이션이 새로운 데이터가 도착할 때마다 호출되는 일부 콜백 함수를 미들웨어에 제공한다는 것을 의미합니다. 대기 세트는 select 소켓과 비슷하며 데이터가 도착할 때까지 응용 프로그램 스레드가 차단되거나 시간 초과가 발생합니다. 일반적으로 DataReader에 액세스하는 작업이 이어집니다.

GUI 응용 프로그램의 경우 일반적으로 사용하는 리스너 접근 방식과 대조적으로 폴링 메커니즘을 사용하는 것이 일반적입니다. 도착한 데이터를 읽는 대신 GUI 위젯을 즉시 업데이트하는 대신 GUI에서 DataReader의 데이터를 일정한 속도 (예 : 5Hz)로 읽거나 가져올 수 있습니다.

이러한 접근 방식을 사용하면 DDS에 액세스 할 때 제어 할 수 있으며 DataReader에서 데이터가 얼마나 빨리 업데이트되는지에 관계없이 필요한 정확한 속도로 DDS에 액세스 할 수 있습니다. 또한 사용자가 자신의 컨텍스트에서 DDS DataReader에 액세스하므로 비 GUI 스레드에서 업데이트되는 데이터에 대한 사용자의 질문이 해결됩니다.

폴링을 사용할 때의 잠재적 인 단점은 일부 지연으로 위젯이 업데이트된다는 것입니다. 예를 들어 5Hz로 폴링하면 최대 추가 지연은 200msec가됩니다. GUI 응용 프로그램에서는 일반적으로 문제가되지 않습니다.

+0

처리중인 일부 데이터는 실시간으로 처리해야합니다. 중요한 데이터를 처리하는 데 지연이 있으면 애플리케이션에 영향을 미칩니다. 따라서 폴링보다 더 나은 해결책을 제안하십시오. – Sid411

+0

높은 응답 성이 요구되는 데이터의 경우 waitset을 사용할 수 있습니다. 소켓은'select' 소켓처럼 작동합니다. 데이터가 사용 가능해질 때까지 스레드가 차단됩니다. 차단을 해제하면 데이터를 읽거나 가져올 수 있습니다. 그러나이 데이터의 성격은 일반적인 GUI 데이터처럼 들리지 않습니다. GUI 응용 프로그램에서 이러한 종류의 실시간 처리를 수행 하시겠습니까? –

+0

예 GUI 응용 프로그램이 아닙니다. GUI는 필드에서 수신 할 데이터를 표시하기위한 것입니다. 받은 데이터를 업데이트 할 GUI 용 스레드가 하나 있습니다. – Sid411