非同期 (シリアル) ワーカー キュー内に実行時間の長い関数があります。この関数は、特定の openCV 呼び出し内でハングすることがあります。何らかの理由で、このハングが原因でメイン スレッドもハングします。一時停止してデバッグモードに入ると、への呼び出しがあることがわかります
semaphore_wait_trap()
メインスレッド (キュー)
ハングしているスレッド (My worker キュー) をデバッグ モードで一時停止すると、このトラップがなくなり、電話で GUI が再び応答するようになります。
ワーカー スレッドの一時停止を解除した後、GUI は 1 ~ 2 秒間応答し (このスレッドが再びアクティブになるまでは疑わしい)、UI は再び応答しなくなります。
このスレッドはdispatch_sync()
、メイン スレッド/キューを呼び出しません。
ワーカーが長時間実行されているため、IOS がメインスレッドを一時停止 (「トラップ」) する可能性はありますか?
ブロックを強制的に削除できますか??
デバッグ モード スタックの印刷画面をいくつか追加しています。
ハングしているキューを一時停止する前に:
そしてぶら下がっているスレッド:
そして、不良キューを一時停止して中断した後: