私は、ライブデータがアプリケーションのビューアに表示されるcustumQGISアプリケーションの構築に携わってきました。
使用されているIPCはUNIXメッセージキューです。
データは、指定された間隔、たとえば3秒で更新されます。
今私が直面している問題は、表示されるデータの処理に3秒以上かかることです。したがって、アプリが次の更新のためにデータの処理を開始する前に、QTimerの更新が停止されます。データが処理された後、QTimerを再起動します。アプリは、更新/更新後(この更新中にアプリが応答しなくなる)、ユーザーがアプリでの作業を継続するための十分な時間を確保できるように動作する必要があります。データが更新されているのを確認します.1つのシナリオで、ユーザーが作業するための許容可能な一時停止を取得できます。
ただし、異なるOS(RHEL5.0からRHEL5.2)では、状況が異なります。タイマーがワイルドになり、連続する更新の間に一時停止を与えることなく起動し続けるため、無限ループになります。この更新データの処理には、間違いなくより長い時間がかかります。 3秒ですが、そのために停止しました-処理中にタイマーを再起動しました..同じロジックが1つのシナリオで機能し、他のシナリオでは機能しません..私が観察した他の事実は、タイマーのこの迅速な起動時にリフレッシュ機能が終了するまでにかかる時間は約300msと非常に短いため、この機能の開始と終了に設定したタイマーの開始と停止は、実際の処理の前にその短い時間で発生します。データが終了し、実行を待機しているキュー内のタイマーの開始は3〜4回であるため、連続する更新のたびに、その時点から無限ループの問題が悪化します。
ここで重要なのは、1つのOSの同じコードの場合、更新時間は約4000ms(同じ量のデータにかかる実際の処理時間)であるのに対し、他のOSの場合は300msであるということです。
多分これは更新されたOSの新しいライブラリと関係があります..しかし、なぜそれがそのように起こっているのか手がかりを得ることができないので、私はそれをデバッグする方法がわかりません...多分pthreadsに関連する何かが白黒に変更されましたOS ??
だから、私のクエリは、QTimerは私が望むものを達成するための良いオプションではないと思うので、QTimerを使用せずにアプリの一部の処理がタイマー化される(そしてOSから独立している)ことを保証する方法はありますか?
どのようなオプションがありますか?pthreadまたはBoostスレッド?スレッドを代替として使用する場合はどちらが良いでしょうか??しかし、更新処理にどれだけ時間がかかっても、連続する更新で少なくとも3秒のギャップを確保するにはどうすればよいですか?
親切に助けてください。
ありがとう。