저는 라이브 데이터가 응용 프로그램의 뷰어에 표시되는 custum QGIS 응용 프로그램을 작성하는 데 관여했습니다.QGIS (Quantum GIS)에서 QTimer 발사 문제
사용중인 IPC는 유닉스 메시지 대기열입니다.
데이터는 지정된 간격 (예 : 3 초)으로 새로 고쳐집니다.
이제 내가 직면하는 문제는 표시 될 데이터의 처리가 3 초 이상 걸린다는 것입니다. 그래서 내가 수행 한 작업은 앱이 다음 업데이트를 위해 데이터를 처리하기 시작하기 전에 새로 고침 QTimer가 중지되고 데이터가 처리 된 후에 다시 QTimer를 다시 시작합니다. 앱이 업데이트/새로 고침 (이 새로 고침 중에 앱이 응답하지 않음) 후에 작업하는 데 충분한 시간이 필요하다는 방식으로 앱이 작동해야합니다. 업데이트되는 데이터를 보는 것 외에도 앱을 사용할 수 있습니다. 한 가지 시나리오에서 사용자가 작동하도록 허용 할 수있는 일시 중지를 얻을 수 있습니다.
다른 OS (RHEL 5.0에서 RHEL 5.2)에서는 상황이 달라집니다. 타이머가 계속 이동하여 연속적인 업데이트를 일시 중지하지 않고 계속 실행하면 무한 루프가됩니다.이 업데이트 데이터 처리 확실히 3 초보다 오래 걸립니다.하지만 그 이유 때문에 타이머가 멈추었습니다. 타이머가 처리되는 동안 다시 시작됩니다. 동일한 로직이 한 시나리오에서 작동하는 반면, 다른 시나리오에서는 작동하지 않습니다. 내가 관찰 한 다른 사실은이 빠른 타이머의 발사는 리프레시 기능이 빠져 나가는 데 걸리는 시간이 매우 짧기 때문에 300ms입니다. 따라서이 기능의 시작과 끝 부분에 놓인 타이머의 시작 - 멈춤은이 작은 시간에 발생합니다. 데이터의 실제 처리가 끝나면 실행 대기중인 큐에 타이머가 3-4 개 시작되어 무한 반복 문제가 그 시점에서 악화됩니다. fo 모든 연속적인 업데이트.
여기서 중요한 점은 한 OS의 동일한 코드에 대해 새로 고치는 시간은 다른 OS의 경우 300ms 인 반면 4000ms (동일한 데이터 양에 대해 실제 처리 시간)로 표시된다는 것입니다.
아마도 이것은 업데이트 된 OS의 최신 라이브러리와 관련이 있습니다. 그러나 디버깅 방법을 알지 못합니다. 그 이유는 어떤 단서를 얻을 수 없기 때문이며 ... 아마도 pthreads와 관련된 것이 있습니다. 변경 b/w 운영 체제 ??
그래서 내 질문에 QTimer를 사용하지 않고도 내 응용 프로그램의 일부 처리가 timerised (그리고 OS와 독립적입니다)라는 확신을 가질 수있는 방법이 있습니다. QTimer가 좋은 옵션이 아닌 것으로 생각합니다. 내가 원하는??
어떤 옵션이있을 수 있습니까 ?? pthreads 또는 부스트 스레드? 어떤 스레드를 대체 스레드로 사용하는 것이 더 좋을까요 ??하지만 어떻게 업데이트 처리 시간이 오래 걸리더라도 적어도 3 초 간격으로 계속 업데이트 할 수 있습니까?
친절히 도움.
감사합니다.
다른 결함은 타이머의 stop-start 명령이 매우 QTimer 자체를 실행 한 결과로 발생한다는 것입니다. 즉 다음 실행주기의 stop-start 문이 실행될 때 QTimer 실행중인 바로 그 사이클에 대해 활성화 되었습니까, 이로 인한 나쁜 영향, 제안 사항이 있습니까? 실제로이 새로 고침 기능은 타이머가 실행되기 때문에 호출 될뿐만 아니라 뷰어의 확대/축소/이동에도 호출되므로 데이터를 중지해야했습니다. 사용자가 확대/축소 할 때 처리하는 시간을 처리하여 앱을 응답 성있게 유지하고 segfaults에서 유지하려면 당연히 – ashishsony