172 похожих чатов

Всем привет, подскажите плиз какие события обрабатывает RunLoop, если к

примеру мы создаем асинхронный блок через диспач груп?
Если мы вызывыем DispatchQ.main.async {} то у нас создается собственный RunLoop для блока кода или же мы будем иметь доступ к RunLoop основного потока?

11 ответов

10 просмотров

Ты совершенно путаешь эти понятия.

Руслан- Автор вопроса
Руслан Лутфуллин
Ты совершенно путаешь эти понятия.

Run loop делает две вещи 1. ожидает пока что-то не произойдёт. 2. отправляет сообщение к получателю. вот если у каждого потока он свой, а мы создаем свою асинхронную задачу в отдельном потоке со своим RunLoop. разве не так?

Вообще говоря RunLoop не связан с DispatchQueue (исключение, Main поток). RunLoop привязан к потоку и создаётся системой вместе с потоком, НО по умолчанию в незапущенном состоянии. Единственный поток, который сам запускает свой RunLoop - это Main. Итак, работа DispatchQueue вне Main потока не связана с RunLoop, а в Main потоке связана напрямую. Все блоки переданные в DispatchQueue.main отрабатывают в common mode и попадают в Input Source типа Perform selector.

Руслан- Автор вопроса

RunLoop в самом простом своём понимании делает лишь одну вещь, это бесконечный цикл, который заставляешь поток жить. Попробуй создать Thread и выполнить в нём какой-то блок. Он выполнится внутри созданного потока и на этом всё, поток умрёт. Если рассматривать RunLoop в расширенном понимании, то за каждый такт бесконечного цикла он просматривает перечень входящих событий в том или ином моде(режиме) и выполняет определённые действия, подсчитывает дедлайн для таймеров, выполняет peform блоки(те самые из DispatchQueue.main) и много чего ещё, НО это не означает, что на главном потоке не выполняется ничего кроме RunLoop.

Руслан
получается что в приложении один RunLoop?

По умолчанию да, внутри главного потока, благодаря ему приложение не завершается сразу после запуска.

Руслан- Автор вопроса
Руслан Лутфуллин
По умолчанию да, внутри главного потока, благодаря...

а тогда если мы создаем свой Thread то у него будет свой RunLoop и он уже будет не давать своему потоку завершиться и будет обрабатывать его события, верно?

Руслан
а тогда если мы создаем свой Thread то у него буде...

RunLoop внутри потока есть всегда, остаётся его запустить. И да, если запущен RunLoop внутри потока, то он не умрёт, до тех пока пока его не убить явно.

Руслан- Автор вопроса
Руслан Лутфуллин
RunLoop внутри потока есть всегда, остаётся его за...

а какого рода события он может обрабатывать существуя в потоке который мы создали? События связанные только с вложенными задачами или же также нажатия на экран и прочие системные?

Руслан
а какого рода события он может обрабатывать сущест...

Любые, какие тебе будут нужны, помимо дефолтных таймеров и прочего списка:

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта