Anton
свой ивентлуп хуярить для анимаций или заюзать токио? И как вы бы видели такое взаимодействие
Anton
котаны
Anton
А то мы с Антоном чот тут обсуждаем, а никто еще не присоеденяется
Anton
кто как еще видит?
Anton
Один уже свое мнение и подход разжевал, оно имеет смысл вполне, но кто еще чо думает?
Anton
И да Anton поставь себе никнейм, по имени неудобно искать)
Anton
Тебе уже советовали https://crates.io/crates/winit
Anton
Потыкай палочкой
Anton
В плане заимствования идей
Anton
Да это же просто управление окном, и базовые ивенты - это никак не сваязано с анимациями или рисовалкой)
Anton
Так то либа норм но не та тема
Anton
Фантазии ноль
Фантазия особо и не нужна, хуярь первое что в голову придет
Anton
Да это же просто управление окном, и базовые ивенты - это никак не сваязано с анимациями или рисовалкой)
Ну цикл событий - в гуй у тя будет примерно так же, а для анимашки лучше токио, врядли ты что нить лучше наваяешь
Anton
ну я также думаю
Anton
так осталась только одна мааахонькая проблема
Anton
посоны токиоебы
Anton
как заимплементить свой вечный реактор запущенный в отдельный тред, и в который можно в рантайме хуярить фьючи
Anton
Anton
@LooMaclin @c_vld @notplhk
Vladimir
Чтобы рулить фьючи есть хендл
Vladimir
Берешь кор, из него сохраняешь хендл, кор ранишь
Vladimir
В хендл пушишь фьючи
Маjко
oj
Маjко
що
Маjко
Ща
Маjко
Откуда читать логи бедствия?
Anton
Anton
проблемы с доступом из отдельного треда вроде нет же?
Anton
Ибо ивентлуп анимаций я буду отдельно создавать
Anton
с другой стороны, наверное можно это объеденить вместе с ивентлупом прикладных эвентов
Vladimir
С доступом из отдельного треда эт ты про что?
Anton
хотя не, лучше в разные, для лучшей отзывчивости
Vladimir
Зачем тебе отдельные треды вообще
Vladimir
Не пойму
Anton
Ты оч ем?
Anton
Анимашки поступают в виде Enum
Anton
future создает statemachine
Vladimir
Какие такие стейт машины
Anton
enum Animation {Move(i32, i32), Resize(i32, i32)}
Anton
*Transition
Vladimir
Жесть какая
Anton
С доступом из отдельного треда эт ты про что?
Блин ну смотри, у меня есть тред с эвентами окна - его надо поместить отдельно от всего контекста чтобы не доебывался до основного треда обработки. Также нужен отдельный тред с базовыми эвентами типо "кликнул на кнопку" и тд. И тред для анимаций - чтобы в основном треде обработки все нормально работало в рантайме и инициализировалось. Иначе весь рантайм будет уже занят ивентлупом и ничего добавить будет уже нельзя
Anton
сам по себе Animation инстанс и есть стейтмашина что сохраняет текущее состояние после изменения элемента, и позволяет дальше по ссылочке управлятьь состоянием этой анимашки
Anton
Какие такие стейт машины
Который нужно заимплиментить
Anton
я не хочу целиком все приложение в одном треде запускать и одном ивентлупе, ибо это жесть
Vladimir
Короче тебе нужны комбинаторы анимаций
Anton
Ага
Anton
если ктото не захочет везде чтоб фьючи были - и захочем в обычном стиле работать сам созадвать треды, и тл думаю это может стать проблемой
Anton
ибо тред уже занят
Vladimir
А насчёт тредов то ты уже надумал чтото
Anton
Что я тогда не понимаю? Ивентлуп занимает все время выполнения
Anton
он занимает очередь, один раз его запустив это все будет крутится вечно
Anton
или да - тот же winit можно работать только через обычный ивентлуп - без привязки к реактору
Vladimir
Короче про треды вне фьюч вообще забудь - они не нужны
Anton
тоесть если все в одном треде пихать - и эвенты окна, и реактор не выйдет
Маjко
как заимплементить свой вечный реактор запущенный в отдельный тред, и в который можно в рантайме хуярить фьючи
@c_vld а ты уверен что Handle Sync+Send? Так то нет, так что если @tapok_satan хочет херачить из других тредов задачи, нихера не прокатит. Если надо из других потоков, то создаешь future::sync::mpsc::channel, ресивер в тред с ивентлупом, в него из других тредов шлешь задачи. Receiver — это стрим, че-то типо того будет: let receiver = ... let core = Core::new()?; let handle = core.handle(); let future = receiver.for_each(|task| handle.spawn(process_task_future(task))); core.run(future)?;
Маjко
Иногда нужны
Маjко
Не факт что в его задаче
Vladimir
Ну есть же cpu-pool всякий, ему вообще Токио вроде параллельно?
Маjко
CpuPool не то, он для блокирующихся задач
Vladimir
Всмысле, я про тредпул для фьючерсов
Маjко
> он для блокирующихся задач
Маjко
Типа для long-running
Маjко
Либо по CPU тяжелых
Vladimir
Стоп
Маjко
Либо если никак не заасинкать
Vladimir
Так это разные вещи
Anton
или да - тот же winit можно работать только через обычный ивентлуп - без привязки к реактору
enum Transition { Move(i32, i32), Resize(i32, i32), Opacity(f16), } tx, rx = channel(); // Anim thread(|_|{ handle = tokio::core(); loop { anim = rx.recv(); // Craete future using handle } }) // main_loop
Vladimir
Зачем ему Токио, если у него анимации, это какраз таки то что блокирует поток
Маjко
enum Transition { Move(i32, i32), Resize(i32, i32), Opacity(f16), } tx, rx = channel(); // Anim thread(|_|{ handle = tokio::core(); loop { anim = rx.recv(); // Craete future using handle } }) // main_loop
Нет, не стоит юзать обычные mpsc, когда есть фьбчерсовский, а то ему нечего будет в ивертлуп пихать
Anton
просто если представить что сначала я делаю полностью всю инициализацию - в контекст забиваю все блоки и обработчики, и потом запускаю ивентлуп окна, и в нем делаю положим еще и обработку того где какая кнопка по позиции например при скролле, в каждой итерации - отзывчивость будет нулевая, также если я запускаю эвентлуп окна в основном потоке - я не смогу запустить реактор, и учитывая проблему того что если я в итерации эвентов окна буду проводить вычисления кликов относительно позиций вьюх их перебирая - то обработку позиций и конечных кликов там и других действий над виджетами - для отзывчивости их надо сделать ленивыми