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

32 ответов

11 просмотров
Куся 🌿⃤ __UKS- Автор вопроса

ну вообще я не разбираюсь в этом, просто к тому что в оф.документации и не написано что оно должно работать в главном треде

Куся 🌿⃤ __UKS
ну вообще я не разбираюсь в этом, просто к тому чт...

А так тогда вызывать API с ассертами на мейн тред если очереди вместе с акторами использовать нельзя? )

Куся 🌿⃤ __UKS
ну вообще я не разбираюсь в этом, просто к тому чт...

И, кстати, первое, что надо запомнить, разбираясь — это что main thread != main queue. Но не всегда.

Куся 🌿⃤ __UKS- Автор вопроса
Andrey
А так тогда вызывать API с ассертами на мейн тред ...

ну например используя систему сигналов. В одном месте сигнал посылаешь, в мейн треде принимаешь и делаешь что нужно

Alex Sherbakov
И, кстати, первое, что надо запомнить, разбираясь ...

в иос всегда, поэтому и стали mainactor использовать как main thread

Куся 🌿⃤ __UKS
ну например используя систему сигналов. В одном ме...

А как принять сигнал в мейн треде в iOS-ной аппе посланный из какого-нибудь актора?

Куся 🌿⃤ __UKS
ну например используя систему сигналов. В одном ме...

Ну это такое — очередность "отпускания" тредов, остановленных по сигналу, не совпадает с очередностью остановки этих тредов. Т.е. делать свою реализацию очереди, основываясь на сигналах — не получится. Точнее, получится, но она не будет работать так, как ожидается.

Pavel Shilyagov
в иос всегда, поэтому и стали mainactor использова...

В iOS да, но я постоянно забываю, что у нас чатик про iOS, сорян :)

Alex Sherbakov
В iOS да, но я постоянно забываю, что у нас чатик ...

думаю поэтому они и напиали эквивалент main queue, чтобы не было непонимания че это такое на серверном приложении

Pavel Shilyagov
думаю поэтому они и напиали эквивалент main queue,...

Возможно, да. Этакая "псевдо-main" очередь.

Pavel Shilyagov
в иос всегда, поэтому и стали mainactor использова...

Не всегда таки. Могу кусок кода дать прямо сейчас. :)

Pavel Shilyagov
да, давай, интересно

Чтоб не облажаться, проверю сначала на iOS :)

Pavel Shilyagov
да, давай, интересно

Конкретно в iOS — таки, похоже, всегда. В консольной программе macOS — не всегда. Код: let serialQueue = DispatchQueue(label: "com.my.serial.queue") let yetAnotherSerialQueue = DispatchQueue(label: "com.my.serial.queue2") DispatchQueue.global().async { print("\r1: \(Thread.current)\r" + "Label: \(OperationQueue.current?.underlyingQueue?.label ?? "None")\r") serialQueue.sync { print("\r2: \(Thread.current)\r" + "Label: \(OperationQueue.current?.underlyingQueue?.label ?? "None")\r") DispatchQueue.main.sync { print("\r3: \(Thread.current)\r" + "Label: \(OperationQueue.current?.underlyingQueue?.label ?? "None")\r") yetAnotherSerialQueue.sync { print("\r4: \(Thread.current)\r" + "Label: \(OperationQueue.current?.underlyingQueue?.label ?? "None")\r") } } } }

Alex Sherbakov
Конкретно в iOS — таки, похоже, всегда. В консольн...

ну в ios это всетаки критически важно чтобы всегда можно было вызвать кусок кода из main thread. Если DispatchQueue.main это не гарантирует, то кому тогда вообще верить?

Alex Sherbakov
Конкретно в iOS — таки, похоже, всегда. В консольн...

так это просто две serial queues, а если запустить одну через dispatchMain() ? будет по идее всегда на мейн треде

Andrey
так это просто две serial queues, а если запустить...

Что значит "просто"? DispatchQueue.main — это главная очередь, не какая-нибудь там "одна из".

А, понял. Интересно, как они в iOS добились что всегда мейн?

Denis Valeryevich
а на вапоре не так что ли?)

Я не проверял, но похоже, что нет...

Denis Valeryevich
а на вапоре не так что ли?)

На вапоре был issue на гитхабе, что DispatchQueue.main вообще не активна, и если вы, дескать, используете в своем коде диспетчеризацию в главную очередь, то она не будет выполняться. Предлагали починить.

Alex Sherbakov
Конкретно в iOS — таки, похоже, всегда. В консольн...

А что будет если в начале объявить очереди DispatchQueue(label: “”, attributes: .concurrent) Не за компом, проверить не могу пока сам.

Jaleel Akbash
А что будет если в начале объявить очереди Dispatc...

1: <NSThread: 0x600003c664c0>{number = 6, name = (null)} Label: None 2: <NSThread: 0x600003c664c0>{number = 6, name = (null)} Label: None 3: <_NSMainThread: 0x600003c1ce00>{number = 1, name = main} Label: com.apple.main-thread 4: <_NSMainThread: 0x600003c1ce00>{number = 1, name = main} Label: com.apple.main-thread

А ну да, там же все .sync 🤦‍♂️ интересно как будет с .async. Ладно, спать в любом случае пойду, тяжело уже код читать. 😅

Jaleel Akbash
А ну да, там же все .sync 🤦‍♂️ интересно как будет...

Не, я уже наигрался в свое время всякими вариантами, мне больше неинтересно :)

Alex Sherbakov
Не, я уже наигрался в свое время всякими вариантам...

Ну насколько помню DispatchQueue serial по дефолту и и async там надо учитывать. Короче да, завтра сам гляну. 🙂

Jaleel Akbash
Наоборот же? 🤔

Ой. Ну да, сорян :)

Alex Sherbakov
Ой. Ну да, сорян :)

Так это меняет картину, если написать `

Alex Sherbakov
Ой. Ну да, сорян :)

Так это меняет картину, если написать let serialQueue = DispatchQueue(label: "com.my.serial.queue") let yetAnotherSerialQueue = DispatchQueue(label: "com.my.serial.queue2") DispatchQueue.global().sync { print("\r1: \(Thread.current)\r" + "Label: \(OperationQueue.current?.underlyingQueue?.label ?? "None")\r") serialQueue.async { print("\r2: \(Thread.current)\r" + "Label: \(OperationQueue.current?.underlyingQueue?.label ?? "None")\r") DispatchQueue.main.async { print("\r3: \(Thread.current)\r" + "Label: \(OperationQueue.current?.underlyingQueue?.label ?? "None")\r") yetAnotherSerialQueue.async { print("\r4: \(Thread.current)\r" + "Label: \(OperationQueue.current?.underlyingQueue?.label ?? "None")\r") } } } }

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

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

подскажите пожалуйста, как мне освободить результат записанный в переменную result? в чем проблема подскажите если МОЖЕТЕ?
Михаил Helper
28
вопрос по москвину - не понимаю вот такого вопроса похоже Сколько разных всегда завершающихся функций с типом a -> a -> b -> a -> a можно реализовать? Две функции одинаково...
Fedor
11
Слушайте, ещё такая интересная задачка. Сделан аудит действий пользователей через триггеры в базе, соответственно каждый пользователь имеет свой логин и пароль в базе. Это пре...
Сергей Бычков
11
есть тут кто-то , кто только начал изучать си? если проходите курс на степике или как-то сами изучаете, пишите, может, скооперируемся?..
Eule
25
Скажите, тут нет проблемы? IMyInterface1 = interface function GetInterface2: IInterface2; ... function TMyInterface.GetInterface2: IInterface2; begin Result := TI...
Ruslan aka DUDE
18
возможно для форматирования TimeStampZ нужен другой механизм, не?
Роман Лях (rgreat)
13
Народ, есть возможность объяснить VS Code, что некий lua-модуль стандартный и грузится по умолчанию? Т.е. хост программа добавляет этот модуль наряду с модулями string, debug ...
Sl
9
Добрый день. Абракадабра в 12-й студии ввела новый тип поля БД TSQLTimeStampOffset, использую в постгресе timestampz и вот с 12-й версии начались чудеса! До этого поля times...
Delphi Photo
9
Коллеги, здравствуйте! А можно узнать ваше мнение относительно Wolfram Mathematica vs Julia? Просто у меня стоит выбор между тем, чтобы продолжить преподавать Wolfram Mathemat...
Илья Гаража
10
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Карта сайта