私は非同期(シリアル)ワーカーキュー内で長時間実行する機能を持っています。 私は、この関数が特定のopenCV呼び出しの中でハングアップすることがあることを知っています。 何らかの理由でこのハングが原因でメインスレッドがハングしてしまいます。 メインスレッドのIOS semaphore_wait_trapがUIでハングアップする
を私はメインスレッド(キュー)に
semaphore_wait_trap()
への呼び出しがあることがわかり、デバッグモードを一時停止し、入力するとき、私はデバッグモードで吊下げ糸(マイワーカーキュー)を中断し、このことができますトラップが消え、GUIが電話で再び応答します。
ワーカースレッドのポーズ解除後、GUIは1〜2秒間応答します(このスレッドが再度アクティブになるまでは疑わしい)。そしてUIが再び応答しなくなります。このスレッドは、メインスレッドへのdispatch_sync()
呼び出しを行いません
/キュー
それはIOSは、労働者が長時間実行であるため(「トラップ」それ)メインスレッドを一時停止することは可能ですか?
ブロックを削除するよう強制できますか?
デバッグモードスタックの印刷画面を追加しています。吊りキューを一時停止する前に
:
そして、吊下げ糸:
と悪いキューを一時停止し、停止後:
あなたやサードパーティ製品は「pixtr」ですか? 。そのサードパーティがあなたのUIからそれを切り離して問題があるかどうかを確認する場合 –
ここではあまり進んでいない(特に、私は 'add_blob'に何が入っているのか分からないので)最高のものは推測です。私の疑念は、間違ったフラグを 'cvFloodFill'に渡しているため、GPUのロックをハングアップさせるということです。 UIKitはまた、スクロールを計算するためにGPUを望んでいるため(DYTransportはGPU計算に関連するプライベートフレームワークです)、UIKitはGPUが使用可能になるのを待ってハングします。 –