У меня есть длинная функция внутри асинхронной (последовательной) рабочей очереди. Я знаю, что иногда эта функция зависает внутри определенного вызова openCV. По какой-то причине это зависание также вызывает зависание основного потока. При приостановке и входе в режим отладки я вижу, что есть вызов
semaphore_wait_trap()
в основном потоке (очередь)
Я могу приостановить зависающий поток (моя рабочая очередь) в режиме отладки, а затем эта ловушка уходит, и графический интерфейс снова реагирует на телефон.
После приостановки рабочего потока графический интерфейс реагирует на 1-2 секунды (я подозреваю, что этот поток снова активируется), а затем пользовательский интерфейс снова перестает отвечать на запросы.
В этом потоке нет вызовов dispatch_sync()
к основному потоку/очереди
Возможно ли, что IOS приостанавливает основной поток ( "ловушки" ), потому что рабочий работает долго?
Могу ли я заставить его удалить блок?
Я добавляю несколько экранов печати в стеке режима отладки.
Перед тем, как приостановить вешающую очередь:
И висячий поток:
И после приостановки и приостановки неудачной очереди: