background top icon
background center wave icon
background filled rhombus icon
background two lines icon
background stroke rhombus icon

Скачать "Урок 55 - Обработка событий во время продолжительных процессов"

input logo icon
Обложка аудиозаписи
Подождите немного, мы готовим ссылки для удобного просмотра видео без рекламы и его скачивания.
console placeholder icon
Теги видео
|

Теги видео

С++
processEvent
QProgressDialog
Субтитры
|

Субтитры

subtitles menu arrow
  • enАнглийский
Скачать
00:00:03
сегодняшнего видео урока это у нас
00:00:05
обработка событий во время
00:00:06
продолжительных процессов что же это
00:00:10
такое и как это вообще работает например
00:00:13
смотрите у нас есть какой-то файл в
00:00:17
нашем приложении тест с.п.
00:00:20
причем сейчас не сохраненный здесь у нас
00:00:25
какие-то данные записаны то есть с
00:00:27
которыми мы допустим работали и так как
00:00:33
мы вот эти данные записали в нашем файле
00:00:37
нам необходимо их как-то обрабатывать то
00:00:40
есть как-то сохраняйте лет сохраняйте
00:00:42
или какие-то дальнейшие действия
00:00:43
производить в данном случае сохранять
00:00:47
если мы допустим эти данные сохраняют на
00:00:50
жесткий диск то во время сохранения у
00:00:53
нас происходит какой-то промежуток
00:00:54
времени пока наш файл
00:00:56
весь выведется файл на жесткий диск то
00:01:01
есть сохранится кругу кори в это время у
00:01:06
нас программа как бы подвисает и
00:01:09
пользователь который конечно
00:01:12
пользователь этой программе он временно
00:01:14
пока ничего не может сделать с этой с
00:01:17
этой самой программы есть на самом как
00:01:22
как вообще можно решить эту проблему
00:01:24
чтобы у нас допустим либо была доступна
00:01:25
программа либо какое-то сообщение
00:01:27
высвечивалась о том что у нас допустим
00:01:30
самой программе происходит в данные нас
00:01:34
какие-то здесь есть чем больше данных то
00:01:36
есть тем дольше у нас обработка событий
00:01:39
условно говоря пользователь может
00:01:41
подумать что пока выполняете то же самое
00:01:45
то же самое сохранение в наше приложение
00:01:48
тех tadano
00:01:50
а пользователь может подумать что
00:01:52
приложение зависла и
00:01:54
но она не отвечает по 2 ст вокруг говоря
00:02:00
так вот чтобы у пользователей таких
00:02:04
программе проблем не возникало в
00:02:05
конечном итоге есть два варианта решения
00:02:07
этой проблемы то есть создать много-
00:02:10
потоковая много- потоковую обработку
00:02:14
события то есть один допустим интерфейс
00:02:17
для пользователя 2 интерфейс у нас идет
00:02:19
на второй поток по сути для обработки
00:02:22
самого события сохранения текущего файла
00:02:26
или есть более простое решение то есть
00:02:30
на к потоковые
00:02:32
много потоковая обработка событий я
00:02:35
пробуду обработку файла мы рассмотрим
00:02:37
чуть позже сейчас же мы рассмотрим более
00:02:39
простой вариант а более простое решение
00:02:43
заключается в выполнении частых вызовов
00:02:46
допустим функции процесс гривен то есть
00:02:48
функция метода
00:02:51
и в программном коде
00:02:58
давайте посмотрим как оно пишется то
00:03:00
есть вот у нас идет обработчик события
00:03:02
процесс и винт работает он следующим
00:03:07
образом то есть данный метод
00:03:09
говорит кают о необходимости обработки
00:03:12
ожидающих очереди
00:03:16
событий и затем возвращает управление
00:03:19
вызвавшего метода то есть высохшему
00:03:22
методу то есть фактически метод exceeds
00:03:29
который допустим нашим идет файле мы вот
00:03:34
этот вот грубо говоря
00:03:38
он у нас представляет собой не более чем
00:03:46
вызов метода процесс events
00:03:49
допустим нашей самой программе который
00:03:56
которая у нас допустим сделает запрос на
00:04:00
обработку событий которые находятся в
00:04:02
очереди и во время обработки событий на
00:04:05
текущий допустим операции цикла
00:04:07
возвращает работоспособность нашего
00:04:11
приложения самого
00:04:13
такой один из простых вариантов как бы
00:04:17
работоспособность того методы которые
00:04:20
выполнялся до этого тем самым наше
00:04:26
приложение оно как бы не в подвешенном
00:04:29
состоянии то есть у нас как будто
00:04:30
приложение ты че это но мы можем
00:04:33
какие-то дальнейшие 10 выполнять если бы
00:04:35
я просто допустим
00:04:36
использовал процесс и винт добавил кпп
00:04:40
процесс и винт наш старый кот то есть
00:04:44
который до этого был создан куда-нибудь
00:04:48
в цикл for где у нас происходит само
00:04:52
сохранения файла то есть часто вызов
00:04:53
этого процесса винт который делает
00:04:56
запрос на обработку события очереди не
00:04:58
возвращал бы нам доступ к текущему метод
00:05:02
у нас бы произошло следующее то есть мы
00:05:07
допустим нажали сохранить файл и тут же
00:05:10
закрыли приложения так как у нас процесс
00:05:14
и винт возвращается постоянно ну как
00:05:16
работоспособности самого приложения
00:05:23
а савин говорит каются необходимости
00:05:28
обработки ожидания ожидающих в очереди события и
00:05:31
затем возвращает управление
00:05:33
вызвавшие функции то есть медно то при
00:05:37
закрытии приложение нашим приложением
00:05:39
она успешно закрылась но файл мог бы не
00:05:43
успеть сохранится и он был бы поврежден
00:05:45
просто то есть как бы мы было в
00:05:47
дальнейшем не смогли прочитать
00:05:48
так как полностью данное они не
00:05:51
записались в наш файл с этим понятно для
00:05:55
этого было сделано здесь в коде
00:05:59
небольшое дополнение сейчас вам покажу
00:06:01
как это все работает то есть пример
00:06:03
смотрите мы нажимаем файл сейф с на
00:06:08
рабочий стол допустим сохраним сохраняем
00:06:14
наш файл и так нажимаем видите нос как
00:06:20
бы к ее прогресс диалог высветился
00:06:25
который отобразил на экране как
00:06:28
происходит процесс сохранения ну и потом
00:06:30
в дальнейшем скрылся
00:06:33
как же все это работает давайте
00:06:35
разберемся в коде
00:06:36
то есть как это все реализовано вообще
00:06:39
то есть до этого у нас не было как раз
00:06:42
диалогом который отображал на экране вот
00:06:45
это само событие в теорию немножко
00:06:49
разобрались давайте теперь перейдем к
00:06:51
практике у нас есть
00:06:53
гулевский метод spreadsheet в райт файл
00:06:57
который понимает
00:06:58
имя файла то есть путь к самому файлу
00:07:02
виде строки здесь мы создаем и файл файл
00:07:07
то есть файл типа key file
00:07:12
и передаем ему имя на обработку
00:07:15
далее мы обращаемся к объекту файл и
00:07:19
к методу опыт то есть если наш файл
00:07:24
успешно открыт на запись данных в
00:07:31
текущий файл то мы просто игнорируем вот
00:07:34
эту их инструкцию если все-таки не
00:07:37
успешно то есть у нас какая-то ошибка
00:07:38
произошла для записи
00:07:40
данный файл мы вводим вот этот и массаж
00:07:43
box
00:07:44
мы прерываем дальнейшее выполнения
00:07:46
программы ну допустим мы проигнорировать
00:07:50
messagebox то есть их инструкцию то есть
00:07:53
и переходим дальше а далее далее если у
00:07:59
нас успешно все-таки открылся файл для
00:08:01
записи
00:08:02
мы передаем наш файл вот этот вот объект
00:08:06
типа к файл по адресу вот это вот и файл
00:08:12
в наш поток
00:08:14
out далее задаем версию двоичной системе
00:08:21
то есть применяем версию кодировки
00:08:23
двоичной системе она по умолчанию
00:08:25
допустим от отеля то версия q4
00:08:28
это до этого мы используем
00:08:30
[музыка]
00:08:33
итак после того как мы передали вот этот
00:08:38
вот к и файл объект file
00:08:40
по адресу файлы то есть адрес точнее
00:08:44
самого вот это вот файл объекта теплоте
00:08:47
файл наш поток
00:08:48
а применили к нему версию котировки в
00:08:52
двоичной системе
00:08:53
далее мы сохраняем наш поток к и and so
00:09:00
magic намбер то есть это случайный номер
00:09:03
который позволит нам отличить наш формат
00:09:07
от каких-то других файлов которые
00:09:09
дальнейшем позволит открывать корректно
00:09:12
файлы именно spreadsheet и далее у нас
00:09:20
идет установка курсора
00:09:21
сотворит курсор на значок бывает курсор
00:09:25
на такой кружок крутящийся его эксперты
00:09:28
были часики переворачивающиеся
00:09:30
переворачивающиеся и так далее с этим
00:09:33
понятно то есть это все в принципе
00:09:35
стандартно вы до этого разбирали теперь
00:09:39
мы начинаем разбирать наш процесс диалог
00:09:42
то есть создается объект типа пью
00:09:44
процесс диалог естественно что в нашем
00:09:50
спросите
00:09:51
процесс диалог была подключена
00:09:52
библиотека то есть наш пробочка тот
00:09:57
который идет процесс диалога
00:09:59
далее мы создали
00:10:01
точнее прогресса диалог создали объект
00:10:04
прогресс указали родителя в dice то что
00:10:07
наше главное окно это его родители по
00:10:10
факту далее мы обращаемся через наш
00:10:12
объект прогресс лейбл текст и здесь уже
00:10:18
указываем сайт лэйбл текст то есть это
00:10:22
означает
00:10:23
у нас путь по факту которую мы сохраняем
00:10:26
saving
00:10:27
то есть мы здесь пишем saving здесь
00:10:28
первый аргумент мы передаем file name
00:10:31
там же высвечивается будет наше имя
00:10:34
то есть saving и имя файлом то есть путь
00:10:36
к текущему файлу
00:10:38
далее прогресс strange 0 это 0 позиция и
00:10:43
ров каунт как выполнить эту нас
00:10:45
максимальное значение с тропы идет и вот
00:10:52
благодаря вот этому у нас как вот это
00:10:54
сообщение передается в наш прогресс
00:11:00
диалог который у нас ты тут полосочкам
00:11:03
как же у нас происходит расчет
00:11:06
вот этих всех данных мы разберемся чуть
00:11:08
позже
00:11:09
далее мы делаем наше окошко модельным ну
00:11:13
то есть чтобы он поверх других окон
00:11:15
буллок и создаем наш цикл for for young
00:11:22
ров 0 мы выполняли наш цикл пока
00:11:26
roof не станет больше raw каунт и прав у
00:11:31
нас выполняется в дальнейшем как вы
00:11:36
помните робко вот у нас 999 тысяч этой
00:11:38
стройки мы просто пересчитываем все
00:11:40
строки здесь прогресс
00:11:43
сет вылью мы передаем значения roof
00:11:47
которые устанавливают наш прогресс бар с
00:11:52
каждой итерации все больше больше больше
00:11:53
то есть у нас итерации цикла прошло у
00:11:56
нас прогресс барр чуть-чуть увеличился
00:11:57
потом следующей итерации цикла прошла у
00:11:59
нас еще чуть-чуть
00:12:00
протез пару увеличился и так далее то
00:12:02
есть постепенно сдвигается
00:12:04
венцы сдвигается то есть увеличивается
00:12:05
когда далее мы вызываем какие процесс
00:12:10
event то есть наш обработчик событий
00:12:12
которые как раз и позволяет допустим
00:12:22
который как раз позволяет допустим
00:12:25
обрабатывать наше событие как бы в
00:12:28
несколько потоков скажем так то есть он
00:12:30
обращается к нашей очереди обработки на
00:12:33
сохранение в файл и возвращает
00:12:37
управление тому методу который вызвал то
00:12:40
есть принципе чтобы наше приложение было
00:12:43
доступно во время
00:12:45
выполнение самой программы с этим
00:12:48
надеюсь понятно если бы мы вызвали
00:12:52
допустим процессы винт вот с таким вот
00:12:55
флагом здесь специального
00:12:57
закомментировал то есть то у нас во
00:13:00
время процесса выполнения самого вот
00:13:03
этого приложения игнорировалось бы
00:13:07
нажатие любой клавиши мыши или
00:13:10
клавиатуры то есть кнопки нажимаем у нас
00:13:14
игнорируется времен пока выполняется сам
00:13:17
процесс то есть пока у нас вызывается
00:13:19
каждый раз этот вот итерация цикла то
00:13:21
есть пока он не закончится с этим здесь
00:13:23
понятно а далее у нас идет проверка есть
00:13:35
у нас допустим прогресс was canceled то
00:13:38
есть была нажата кнопка install the до
00:13:42
завершения сохранения файла the file наш
00:13:45
файл будет удален
00:13:47
ну и естественно вернуть sens то есть
00:13:49
что мы прекратили сохранение нашего
00:13:51
файла
00:13:54
если допустим наша кнопка не была нажата
00:13:58
то есть концом время сохранения файла то
00:14:01
мы продолжаем дальше сохранением у нас
00:14:06
еще идет вложенный цикл то есть которые
00:14:08
им in the column катара пересчитывает
00:14:11
столбцы каун у нас по сути выполняет
00:14:17
такую операцию как допустим мы передаем
00:14:20
raw и колонны в нашу формулу то есть
00:14:24
перегружены
00:14:25
не то допустим формула ну или созданными
00:14:27
тот формат который возвращает допустим
00:14:31
уже какое то значение которое хранится
00:14:33
по текущему адресу в наших стр и здесь у
00:14:38
нас для экономии места файл то есть
00:14:40
рассказал при создании самого приложения
00:14:42
spreadsheet если в допустим у нас
00:14:45
текущая ячейка
00:14:47
пустая
00:14:51
то мы ее как бы так получается у нас
00:15:00
ячейка наши
00:15:01
пустая она у нас становится ложный
00:15:10
смотрите если у нас допустим здесь
00:15:12
формула возвращает какое-то значение в
00:15:15
стр то есть нас по сути ненулевое
00:15:18
значение хранится там то есть у нас что
00:15:22
то сохранена и вот благодаря методу из м
00:15:26
то мы проверяем
00:15:27
если встр is empty пустой то мы
00:15:33
возвращаем истину а истины инвертируем выше то есть
00:15:36
как бы игнорируем по сути
00:15:38
пустые ячейки и мы их пропускаем то есть
00:15:41
мы не сохраняем их если у нас какое-то
00:15:43
значение хранится у нас она вводится в
00:15:46
поток то есть у нас вводится формат к
00:15:50
int 16 то есть 16 бит 16 рушишь на 16
00:15:58
колонн и сама строка у нас такой формат
00:16:01
будет так у нас кодируется наш формат с
00:16:05
этим понятно здесь есть мы указываем
00:16:08
сначала адрес строки и столбца потом уже
00:16:14
записываем какое-то значение и так далее
00:16:17
то есть у нас каждой итерации цикла
00:16:18
вложено она по сути сохраняет то
00:16:23
значение которое сохранится у нас в
00:16:24
текущей ячейки то есть у нас есть
00:16:27
какое-то пустое значение здесь есть она
00:16:29
просто будет игнорироваться
00:16:31
и благодаря этому мы будем как бы
00:16:33
экономить место нашего файла точнее наш
00:16:38
файл будет меньше места занимать на
00:16:40
нашем жестком диске благодаря только вот
00:16:42
этому условию если бы у нас здесь была просто out
00:16:45
такой-то такой-то то нас бы наш файл
00:16:47
занимал место ровно столько сколько у
00:16:50
нас есть и чей нашем fight и не важно
00:16:52
что они пустые или не пустые здесь мы
00:16:54
как бы проверяем что они пустые мы их
00:16:57
просто не сохраняет
00:16:58
зачем они нужны одари выходим мы из тела
00:17:05
главного цикла по факту допустим у нас
00:17:09
идет for вот здесь у нас закрывается
00:17:13
допустим первые цикла которые создан был
00:17:16
и принципе все то есть мы обращаемся к
00:17:19
методу ты обрекаешь на restore и away
00:17:21
the cursor то есть возвращаем наш курсор
00:17:23
обычный стандартный вид риторика droid
00:17:27
то есть что наши сохранение успешно
00:17:29
произведена сайте надеюсь понятно вот в
00:17:33
общем то и все единственное что здесь
00:17:40
стоит запомнить то что благодаря
00:17:46
обработчиком обработчика событий мы как
00:17:49
бы разблокируем как бы делаем не
00:17:52
подвешенное состояние нашего окна
00:17:54
благодаря вызову и при каждой итерации
00:17:57
то есть при каждом вызываем данный
00:18:01
обработчик событий процесс и винт данный
00:18:04
метод при каждой итерации цикла
00:18:06
что сообщает пьют о том что необходимо
00:18:11
обработать события которые находятся в
00:18:13
очереди сюда пустил смотрите здесь у нас
00:18:19
мы сообщаем пьют что необходимо
00:18:21
обработать событие которое находит но
00:18:23
это находится в очереди и возвращаемся
00:18:25
как бы к самому интерфейс у самой
00:18:27
программы вот этот вот весь код вот эта
00:18:32
вот вся операция цикла дальнейшая
00:18:34
продолжается она как бы продолжается в
00:18:36
фоновом режиме потом мы выходим допустим
00:18:39
из текущей итерации цикла повторяется мы
00:18:42
опять вызываем обработчик событий опять
00:18:45
же сообщаем что необходимо обработать
00:18:47
нашу события которые находятся в очереди
00:18:49
на обработку событий и
00:18:54
то есть как бы фоне начинаем выполнять
00:18:56
этот сохранения файла то есть текущей
00:18:59
итерации благодаря вот этому то есть как
00:19:03
бы круговорота и постоянному вызову
00:19:05
процесса и винт мы можем разблокировать
00:19:09
наше приложение то есть вместо того что
00:19:11
она у нас будет просто как бы не
00:19:12
отвечать на запросы пользователей то
00:19:14
есть у нас просто как бы в подвешенном
00:19:16
состоянии пока происходит сохранение она
00:19:19
у нас будет полностью работоспособным
00:19:21
только единственное что как сказать
00:19:31
единственное что будет доступна вся
00:19:33
функциональность нашем приложении
00:19:36
но здесь надо так как мы добавили здесь
00:19:40
прогресс диалог который позволяет
00:19:42
отображать процесс сохранения нашего
00:19:44
файла это очень удобно так ну вот в
00:19:50
общем то и все это такой был простой
00:19:53
вариант
00:19:55
скажем так многопоточности условной про
00:20:00
многопоточность мы поговорим немного
00:20:03
далее сейчас на текущем этапе
00:20:09
принципе вот это вот вполне будет
00:20:11
достаточно разобран то что мы сейчас
00:20:13
разобрали все на этом всё всем спасибо
00:20:18
за уделенное время всем кому понравился
00:20:21
данный видео-урок
00:20:22
обязательно не забываем ставить большой
00:20:24
палец вверх а так же подписываться на
00:20:26
мой канал если еще не подписан а ну и
00:20:28
рекомендовать друзьям знакомым и если
00:20:29
считаете что данное видео было полезно
00:20:33
всем спасибо и всем до скорых встреч

Описание:

В данном видео уроке вы познакомитесь с таким обработчиком событий как processEvent который позволяет делать запрос на обработку событий в очереди и возвращать работоспособность программы во время выполнения самого процесса - без использования данного обработчика события, если в очереди событий находится очень много разных событий которые выполняются продолжительное время, у пользователя приложения может сложится мнение что приложение зависло. Ссылка на статью с кодом: http://cppstudio.ru/?p=498

Готовим варианты загрузки

popular icon
Популярные
hd icon
HD видео
audio icon
Только звук
total icon
Все форматы
* — Если видео проигрывается в новой вкладке, перейдите в неё, а затем кликните по видео правой кнопкой мыши и выберите пункт "Сохранить видео как..."
** — Ссылка предназначенная для онлайн воспроизведения в специализированных плеерах

Вопросы о скачивании видео

mobile menu iconКак можно скачать видео "Урок 55 - Обработка событий во время продолжительных процессов"?mobile menu icon

  • Сайт http://unidownloader.com/ — лучший способ скачать видео или отдельно аудиодорожку, если хочется обойтись без установки программ и расширений. Расширение UDL Helper — удобная кнопка, которая органично встраивается на сайты YouTube, Instagram и OK.ru для быстрого скачивания контента.

  • Программа UDL Client (для Windows) — самое мощное решение, поддерживающее более 900 сайтов, социальных сетей и видеохостингов, а также любое качество видео, которое доступно в источнике.

  • UDL Lite — представляет собой удобный доступ к сайту с мобильного устройства. С его помощью вы можете легко скачивать видео прямо на смартфон.

mobile menu iconКакой формат видео "Урок 55 - Обработка событий во время продолжительных процессов" выбрать?mobile menu icon

  • Наилучшее качество имеют форматы FullHD (1080p), 2K (1440p), 4K (2160p) и 8K (4320p). Чем больше разрешение вашего экрана, тем выше должно быть качество видео. Однако следует учесть и другие факторы: скорость скачивания, количество свободного места, а также производительность устройства при воспроизведении.

mobile menu iconПочему компьютер зависает при загрузке видео "Урок 55 - Обработка событий во время продолжительных процессов"?mobile menu icon

  • Полностью зависать браузер/компьютер не должен! Если это произошло, просьба сообщить об этом, указав ссылку на видео. Иногда видео нельзя скачать напрямую в подходящем формате, поэтому мы добавили возможность конвертации файла в нужный формат. В отдельных случаях этот процесс может активно использовать ресурсы компьютера.

mobile menu iconКак скачать видео "Урок 55 - Обработка событий во время продолжительных процессов" на телефон?mobile menu icon

  • Вы можете скачать видео на свой смартфон с помощью сайта или pwa-приложения UDL Lite. Также есть возможность отправить ссылку на скачивание через QR-код с помощью расширения UDL Helper.

mobile menu iconКак скачать аудиодорожку (музыку) в MP3 "Урок 55 - Обработка событий во время продолжительных процессов"?mobile menu icon

  • Самый удобный способ — воспользоваться программой UDL Client, которая поддерживает конвертацию видео в формат MP3. В некоторых случаях MP3 можно скачать и через расширение UDL Helper.

mobile menu iconКак сохранить кадр из видео "Урок 55 - Обработка событий во время продолжительных процессов"?mobile menu icon

  • Эта функция доступна в расширении UDL Helper. Убедитесь, что в настройках отмечен пункт «Отображать кнопку сохранения скриншота из видео». В правом нижнем углу плеера левее иконки «Настройки» должна появиться иконка камеры, по нажатию на которую текущий кадр из видео будет сохранён на ваш компьютер в формате JPEG.

mobile menu iconСколько это всё стоит?mobile menu icon

  • Нисколько. Наши сервисы абсолютно бесплатны для всех пользователей. Здесь нет PRO подписок, нет ограничений на количество или максимальную длину скачиваемого видео.