私は少し問題に遭いましたが、どうすればいいのか分かりません。Qtプロセス指定した時間より長いイベント処理
Qt 4.8.6、Qt creator 3.3.2、Debian 7カーネル3.8.13を実行しているBeaglebone BlackにUbuntu 12.04のクロスコンパイル環境を実行しています。
私が見ている問題は、このコードということである:それはQtのドキュメント(少なくとも私の解釈)に応じなければならないよう
if (qApp->hasPendingEvents())
{
qDebug() << "pending events";
}
qApp->processEvents(QEventLoop::AllEvents, 10);
は機能しません。私は、プロセスイベントループが指定された10ミリ秒のAT MOSTで機能することを期待しています。
qDebugステートメントは決して印刷されません。したがって、処理されるイベントはないと予想し、プロセスイベントステートメントは非常に早く出入りします。ほとんどの場合、これが当てはまります。
qDebugステートメントはスキップされ、processEventsステートメントは1秒から2秒の間実行されます(たびに頻繁ではありませんが)。
プロセスイベントで何が起きているのかを突き止め、何が原因で遅延が発生しているのかを調べる方法はありますか?
コードの残りの部分は表示されませんが、疑似同期スパゲッティコードを作成しているように見えます。あなたは、これらの1〜2秒間ブロックするような操作を実行しています。イベントループを再入力すると、既存のタイムアウトは無視されます。この 'processEvents'が' processEvents'を再度呼び出すコードを呼び出すと、あなたは困っています。一般的に言えば、 'processEvents'呼び出しを使わずにクリーンな非同期コードを書くことができます。 –
一般的に言えば、一定時間後に制御を取り戻す場合は、タイマーを使用する必要があります。リエントラントの問題、または処理に時間がかかりすぎるシステムイベントで戦うことはありません。あるいは、少なくとも、あなたが望むようにコードを制御し続けるためにできる最大の努力をするでしょう。 –