문제

나는 애플리케이션의 시청자에게 라이브 데이터가 표시되는 custum qgis 응용 프로그램을 구축하는 데 관여했습니다.

사용중인 IPC는 Unix 메시지 대기열입니다.

데이터는 지정된 간격으로 3 초로 새로 고침해야합니다.

이제 내가 직면하고있는 문제는 표시 될 데이터 처리가 3 초 이상 걸린다는 것입니다. 데이터가 처리 된 후 다시 QTIMER를 다시 시작합니다. 앱은 업데이트/새로 고침 후 (이 새로 고침이 응답하지 않으면) 사용자는 앱에서 계속 작동 할 수있는 충분한 시간을 가져야합니다. 데이터가 업데이트되는 것을 볼 수 있습니다. 한 시나리오에서 사용자가 작동 할 수있는 일시 정지를 얻을 수 있습니다.

그러나 다른 OS (RHEL 5.0에서 RHEL 5.2)에서는 상황이 다릅니다. 타이머는 야생으로 이동하여 연속적인 업데이트가 무한 루프로 들어가는 일시 정지를 제공하지 않고 계속 발사됩니다. 3 초,하지만 바로 그 이유 때문에 처리하는 동안 타이머를 중지했습니다. 한 시나리오에서 동일한 논리가 작동하는 동안 다른 경우에는 그렇지 않습니다. 다른 사실은 타이머를 빠르게 발사 할 때입니다. 출구로의 새로 고침 기능으로 취한 시간은 매우 작은 ABT 300m 이므로이 기능의 시작 및 엔드에 배치 한 타이머의 시작 단계는 그 작은 시간에 발생합니다. 실제 처리 전에. 데이터가 끝나고, 큐 타이머의 3-4 번의 시작이 실행되기를 기다리고 있으므로, 모든 연속 업데이트에 대해 무한 루핑 문제가 그 시점에서 악화됩니다.

여기서 주목해야 할 중요한 점은 한 OS의 동일한 코드의 경우 새로 고침 시간이 약 4000ms (동일한 양의 데이터에 대해 실제 처리 시간) 인 반면 다른 OS의 경우 300ms입니다.

어쩌면 이것은 업데이트 된 OS에서 최신 LIB와 관련이있을 수 있습니다. 그러나 나는 왜 그런 일이 일어나는지 단서를 얻을 수 없기 때문에 그것을 디버깅하는 방법을 모르겠습니다. pthreads와 관련된 무언가가 B/W를 변경했을 수도 있습니다. OSS ??

따라서 내 쿼리는 QTimer가 내가 원하는 것을 달성하기에 좋은 옵션이 아니라고 생각하기 때문에 앱의 일부 처리가 타이머로 표시되고 OS와 무관 한 것입니다.

거기에 어떤 옵션이있을 수 있습니까? PTHREADS 또는 BOOST THREADS? 스레드를 대체로 사용하려면 어느 쪽이 더 좋을까요?

친절하게 도와주세요.

감사.

도움이 되었습니까?

해결책

허용 가능한 장기 솔루션을 얻으려고한다면 별도의 스레드에서 디스플레이 업데이트를 조사합니다. 해당 스레드에서는 디스플레이를 이미지에 페인트하여 원하는만큼 자주 업데이트 할 수 있습니다. 비록 스레드를 스로틀로 스로틀하여 사용 가능한 모든 처리 시간이 소요되지는 않습니다. 그런 다음 UI 스레드에서 해당 이미지를 읽고 화면으로 그릴 수 있습니다. 이미지의 다른 부분을 표시 할 수 있기 때문에 패닝에 대한 반응성을 향상시킬 수 있습니다. 타이머를 기준으로 3 초마다 이미지를 업데이트 할 수 있습니다 (소스에서 다시 그리기 만하면) 새 데이터가 완전히 새로 고침 될 때마다 다른 스레드가 신호를 방출 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top