#13. Async привязка к C++ часть 1
00:00 Введение и проблема -Приветствие и анонс решения проблемы в системной инженерии. -Обзор предыдущего видео: соединение мира языка Си с миром JavaScript и TypeScript. -Проблема: при длительном открытии системного диалога страница зависает. 01:24 Причины зависания -Объяснение проблемы параллелизма и синхронизации потоков в JavaScript. -В браузере работает один поток, который управляет всем, включая JavaScript и движок Blink. -Бесконечный цикл в JavaScript приводит к замораживанию страницы. 03:00 Решение проблемы -Необходимость асинхронных вычислений для решения проблемы блокировки. -Пример синхронного вызова функции и обновления представления. -Введение лямбда-функций для реализации асинхронности. 04:34 Реализация асинхронности -Добавление лямбда-функции в функцию doChili для обработки результата. -Запуск рабочего потока для выполнения задачи и вызова лямбда-функции при завершении. -Отделение пути ошибки от обычного потока с помощью функций accept и reject. 08:06 Обновление интерфейса и серверной части -Преобразование MB в строку для упрощения логики. -Изменение функции doChili для возврата void и приёма функций accept и reject. -Удаление try-catch благодаря передаче исключений через функцию reject. 10:05 Проверка работы -Проверка работы асинхронной функции после внесения изменений. -Настройка обработки кнопки «Отмена» и исключений. -Подчёркивание преимуществ лямбда-функций в JavaScript. 10:47 Переход к C-языку и обработка аргументов -Добавление трёх аргументов: указатели 0, 1, 2. -Запуск окна сообщений в другом потоке. -Сохранение указателей обратного вызова для выполнения после завершения работы с окном сообщения. 11:40 Использование std async -Применение std async для управления пулом потоков. -Создание будущего для отслеживания выполнения задач. -Важность сохранения будущего, чтобы избежать блокировки. 12:00 Создание карты вызовов -Добавление неупорядоченной карты для хранения вызовов. -Назначение уникального идентификатора каждому вызову. -Использование uint32_t для генерации идентификатора. 13:12 Реализация обратных вызовов -Настройка значений P accept и P reject в зависимости от указателей аргументов. -Запуск асинхронной задачи с использованием std async. -Преобразование строкового значения из указателей аргументов в строку. 14:25 Обработка исключений и возврат значений -Проверка возвращаемого значения на ID cancel для вызова P reject. -Выполнение функции с аргументами в виде списка значений Ceph V8. -Возврат строки исключения при отмене. 15:54 Проверка ответа пользователя -Проверка ответа пользователя через ID yes или ID cancel. -Отправка лямбда-функции в пул потоков для выполнения в другом потоке. -Обновление изображения после нажатия кнопки в окне сообщения. 16:47 Проблема с обратными вызовами -Окно сообщения появляется, но обратные вызовы не выполняются. -Отладка показывает, что код выполняется, но эффекта нет. -Обещание обсудить проблему в следующем видео. 17:29 Заключение -Призыв к зрителям самостоятельно разобраться в проблеме. -Благодарность за просмотр и прощание.
00:00 Введение и проблема -Приветствие и анонс решения проблемы в системной инженерии. -Обзор предыдущего видео: соединение мира языка Си с миром JavaScript и TypeScript. -Проблема: при длительном открытии системного диалога страница зависает. 01:24 Причины зависания -Объяснение проблемы параллелизма и синхронизации потоков в JavaScript. -В браузере работает один поток, который управляет всем, включая JavaScript и движок Blink. -Бесконечный цикл в JavaScript приводит к замораживанию страницы. 03:00 Решение проблемы -Необходимость асинхронных вычислений для решения проблемы блокировки. -Пример синхронного вызова функции и обновления представления. -Введение лямбда-функций для реализации асинхронности. 04:34 Реализация асинхронности -Добавление лямбда-функции в функцию doChili для обработки результата. -Запуск рабочего потока для выполнения задачи и вызова лямбда-функции при завершении. -Отделение пути ошибки от обычного потока с помощью функций accept и reject. 08:06 Обновление интерфейса и серверной части -Преобразование MB в строку для упрощения логики. -Изменение функции doChili для возврата void и приёма функций accept и reject. -Удаление try-catch благодаря передаче исключений через функцию reject. 10:05 Проверка работы -Проверка работы асинхронной функции после внесения изменений. -Настройка обработки кнопки «Отмена» и исключений. -Подчёркивание преимуществ лямбда-функций в JavaScript. 10:47 Переход к C-языку и обработка аргументов -Добавление трёх аргументов: указатели 0, 1, 2. -Запуск окна сообщений в другом потоке. -Сохранение указателей обратного вызова для выполнения после завершения работы с окном сообщения. 11:40 Использование std async -Применение std async для управления пулом потоков. -Создание будущего для отслеживания выполнения задач. -Важность сохранения будущего, чтобы избежать блокировки. 12:00 Создание карты вызовов -Добавление неупорядоченной карты для хранения вызовов. -Назначение уникального идентификатора каждому вызову. -Использование uint32_t для генерации идентификатора. 13:12 Реализация обратных вызовов -Настройка значений P accept и P reject в зависимости от указателей аргументов. -Запуск асинхронной задачи с использованием std async. -Преобразование строкового значения из указателей аргументов в строку. 14:25 Обработка исключений и возврат значений -Проверка возвращаемого значения на ID cancel для вызова P reject. -Выполнение функции с аргументами в виде списка значений Ceph V8. -Возврат строки исключения при отмене. 15:54 Проверка ответа пользователя -Проверка ответа пользователя через ID yes или ID cancel. -Отправка лямбда-функции в пул потоков для выполнения в другом потоке. -Обновление изображения после нажатия кнопки в окне сообщения. 16:47 Проблема с обратными вызовами -Окно сообщения появляется, но обратные вызовы не выполняются. -Отладка показывает, что код выполняется, но эффекта нет. -Обещание обсудить проблему в следующем видео. 17:29 Заключение -Призыв к зрителям самостоятельно разобраться в проблеме. -Благодарность за просмотр и прощание.




