Похожие презентации:
Процессы и потоки. Программирование поддержки сети
1.
ВНИМАНИЕ!ИСПОЛЬЗОВАНИЕ СРЕДСТВ СВЯЗИ, ФОТО,
ВИДЕО И ЗВУКОЗАПИСИ ЗАПРЕЩЕНО!
2.
ИНФОРМИРОВАНИЕ О ХОДЕ СПЕЦИАЛЬНОЙ ВОЕННОЙ ОПЕРАЦИИ2
3.
ВОЕННО-КОСМИЧЕСКАЯ АКАДЕМИЯ ИМЕНИ А.Ф. МОЖАЙСКОГОКафедра системы сбора и обработки информации
«Методы программирования»
Лекция № 19
кандидат технических наук
полковник Дудкин А.С.
4.
4Лекция № 19. Процессы и потоки.
Программирование поддержки сети
Цель: изучение технологий применения кроссплатформенной библиотеки для
построения переносимых приложений с использованием классов для работы с
процессами, потоками и поддержкой сети.
Учебные вопросы:
1. Процессы. Потоки.
2. Сокетное соединение.
3. Модель «клиент-сервер».
5.
Литература по теме занятия1. Платонов А.А., Домбровский А.Ф. Методы программирования: курс лекций.
Электронное пособие. – СПб.: ВКА имени А.Ф. Можайского, 2016. – 171 с.
2. Технологии программирования: учебное пособие / В.В. Мышко, Д.Н.
Бородько, В.В. Ткаченко. – СПб.: ВКА имени А.Ф. Можайского, 2015. – 84 с.
3. Шлее М. Qt 5.10. Профессиональное программирование на C++. – СПб.: БХВПетербург, 2019. – 912 с.
4. Программирование на языке С++ в среде Qt Creator: / Е.Р. Алексеев, Г. Г.
Злобин, Д. А.Костюк,О.В.Чеснокова, А.С.Чмыхало М. : ALT Linux, 2015. 448 с. :
ил. (Библиотека ALTLinux).
5. Технологии разработки программного обеспечения: практикум / В.А.
Мыльников, В.А. Лохвицкий, А.С. Марковский. – СПб.: ВКА имени А.Ф.
Можайского, 2016. – 150 с.
6. ГОСТ Р 56939-16. Разработка безопасного программного обеспечения.
7. РУСБ.10015-01 – Руководящие указания по конструированию прикладного
программного обеспечения для ОС СП «Astra Linux Special Edition».
8. Qt Reference Documentation.
5
6.
Контроль готовности обучающихся к учебному занятиюКонтрольный вопрос № 1: Сформулируйте содержание методологии
объектно-ориентированного программирования
методология программирования, основанная на представлении
программы в виде совокупности объектов, каждый из которых
является экземпляром определенного класса, а классы
сформированы в иерархии наследования
6
7.
Контроль готовности обучающихся к учебному занятиюКонтрольный вопрос № 2: Назовите фундаментальные принципы
объектно-ориентированного программирования
ИНКАПСУЛЯЦИЯ – принцип, согласно которому внутренне
устройство сущностей нужно объединять в специальной
«оболочке» и скрывать от вмешательства извне.
НАСЛЕДОВАНИЕ – принцип, согласно которому абстрактный
тип данных может наследовать данные и функциональность
некоторого существующего типа, способствую повторному
использованию компонентов программного обеспечения.
ПОЛИМОРФИЗМ – способность объекта использовать
методы производного класса, который не существует на
момент создания базового.
7
8.
Учебный вопрос № 1Процессы. Потоки.
8
9.
Учебный вопрос № 19
Основными критическими ресурсами при выполнении приложения
являются время и память:
•процесс описывает статику приложения и является контейнером
для всех ресурсов, используемых приложением (выделяемую для
приложения память, открытые файлы и другие ресурсы
приложения);
•для описания динамики выполнения приложения используется
объект «поток».
10.
Учебный вопрос № 110
11.
Учебный вопрос № 111
Выбор способа реализации многозадачности
Обычно реализация многопоточного процесса является более эффективным решением
по сравнению с реализацией посредством процессов, так как:
•на создание потоков система тратит времени и ресурсов гораздо меньше, чем на
создание процессов;
•переключение потоков требует относительно небольших затрат (сохранение и
восстановление контекста потока);
•все потоки одного процесса разделяют одно адресное пространство и имеют доступ к
глобальным данным, поэтому не нужно задействовать системные механизмы для
обмена данными;
•все потоки одного процесса имеют доступ к ресурсам, принадлежащим этому процессу,
таким как открытые файлы, каналы и т. д.;
•потоки, принадлежащие разным процессам, не имеют между собой ничего общего,
однако они могут получить доступ к одним и тем же ресурсам и общей памяти.
12.
Учебный вопрос № 112
Реализация многозадачности посредством процессов
•При создании распределенных (клиент-серверных) приложений;
•Локально.
Программист должен знать и эффективно применять механизмы для
обмена данными между процессами.
13.
Учебный вопрос № 1QProcess
• Наследует IODevice =>
– объекты могут считывать/записывать данные
запущенного процесса.
• Посредством сигналов/слотов реакция на запросы вывода данных запущенным
процессом.
• Средства для манипулирования системными переменными.
При запуске процесса ОС:
•находит нужный исполняемый файл;
•создает служебные системные структуры для описания процесса;
•формирует для нового процесса адресное пространство и загружает в него код и
данные исполняемого файла, а также требуемые динамические библиотеки
13
14.
Учебный вопрос № 114
Для создания процесса его нужно запустить. Запуск процесса выполняется методом
start (), в который необходимо передать имя команды и список ее аргументов, либо
все вместе: команду и аргументы одной строкой.
Как только процесс будет запущен, отправляется сигнал started(), а после
завершения его работы — сигнал finished() -> NormalExit (нормальное завершение) и
CrashExit (аварийное завершение).
Для чтения данных запущенного процесса класс QProcess предоставляет два
разделенных канала:
канал стандартного вывода (stdout) и канал ошибок (stderr).
Считывать и записывать данные в процесс можно с помощью методов класса
QiODevice: write () , read (), readLine () и getchar () .
15.
Учебный вопрос № 1Сигналы
старта/завершения
дочернего процесса
void finished ( int
exitCode, QProcess::ExitStatus
exitStatus )
QProcess::NormalExit
QProcess::CrashExit
void started ()
15
16.
Учебный вопрос № 116
Реализация многозадачности посредством потоков
•разделение задачи на несколько подзадач, последовательность
выполнения которых несущественна (от программиста требуется корректно
представить задачу в виде подзадач и, возможно, назначить отдельным
потокам разные приоритеты);
•разделение задачи на несколько подзадач, когда «выход» одной
подзадачи является «входом» для другой, например, для того, чтобы
данные можно было обрабатывать, их сначала нужно сформировать (все
или хотя бы часть). Для таких задач на первый план выходит синхронизация
потоков;
•разделение задачи на несколько подзадач, когда выполнение одной
подзадачи, например ввод данных с внешнего устройства, является
приоритетной по отношению к другим действиям, например обработке
данных.
17.
Учебный вопрос № 117
Поток
Независимая задача, которая выполняется внутри процесса и разделяет вместе с
другими потоками данного процесса:
•общее адресное пространство,
•код
•глобальные данные
•ресурсы
Важно!
все потоки одного процесса выполняются в едином адресном пространстве, поэтому,
+ имеют доступ ко всем ресурсам процесса
- «-» => синхронизация
18.
Учебный вопрос № 118
СОЗДАНИЕ ПОТОКА средствами Qt
•создать класс, производный от Qthread
•перегрузить виртуальный метод void QThread::run () [virtual protected]
•создать объект производного типа
•вызвать посредством созданного объекта метод
void QThread::start ( Priority priority = InheritPriority ) [slot],
который в свою очередь создаст собственно поток, который
начнет выполнение с перегруженного метода run()
19.
Учебный вопрос № 119
Приоритеты
У каждого потока есть приоритет, указывающий процессору, как должно протекать
выполнение потока по отношению к другим. Приоритеты разделяются по группам:
♦ в первую группу входят четыре приоритета, применяемые наиболее часто. Их
значимость распределяется по возрастанию: IdlePriority, LowestPriority, LowPriority,
NormalPriority. Они подходят для решения задач, которым процессор требуется только
время от времени, — например, для фоновой печати или для каких-нибудь несрочных
действий;
♦ во вторую группу входят два приоритета: HighPriority и HighestPriority. Пользуйтесь
этими приоритетами с особой осторожностью. Обычно такие потоки большую часть
времени ожидают каких-либо событий;
♦ в третью входит лишь один приоритет - TimeCriticalPriority. Потоки с ним нужно
создавать в случае крайней необходимости. Этот приоритет нужен для программ,
напрямую общающихся с аппаратурой или выполняющих операции, которые ни в коем
случае не должны прерваться.
20.
Учебный вопрос № 120
Завершение потока
•если в потоке есть цикл обработки событий, то при выходе из цикла. Для такого
выхода должен быть вызван метод void QThread::quit () [slot]
•void QThread::terminate () [slot] – аварийное завершение
•если цикла обработки событий нет, то при естественном завершении метода
run()
Приостановка потока
bool QThread::wait(unsigned long time = ULONG_MAX)
void QThread::msleep(unsigned long msecs) [static]
void QThread::sleep(unsigned long secs) [static]
void QThread::usleep(unsigned long usecs) [static]
21.
Учебный вопрос № 1Сигналы потока
•void QThread::finished() [signal]
•void QThread::started() [signal]
21
22.
Учебный вопрос № 122
Синхронизация потоков одного процесса
• QMutex
• QSemaphore
• QReadWriteLock – похож на QMutex, но предоставляет
возможность различать операции чтения/записи
• QWaitCondition – «усыпить потоки» до наступления какогонибудь условия
23.
Учебный вопрос № 2Сокетное соединение.
23
24.
Учебный вопрос № 224
Сокет (от англ, socket — гнездо, разъем) — это устройство
пересылки данных с одного конца линии связи на другой. Другой
конец линии может принадлежать процессу, работающему на
локальном компьютере, а может располагаться и на удаленном
компьютере, подключенном к Интернету и расположенном в другом
полушарии Земли.
Сокетное соединение – это соединение типа точка-точка (point to
point), которое осуществляется между двумя процессами.
25.
Учебный вопрос № 225
Сокеты разделяют на:
- дейтаграммные (datagram);
- поточные (stream).
Дейтаграммные сокеты осуществляют обмен пакетами данных.
Поточные сокеты устанавливают связь и выполняют потоковый обмен
данными через установленную ими линию связи.
Поточные сокеты работают в обоих направлениях — другими словами, то,
что один из процессов записывает в поток, может быть считано процессом
на другом конце связи, и наоборот.
Для дейтаграммных сокетов Qt предоставляет класс QUdpSocket, а для
поточных — класс QTcpSocket.
26.
Учебный вопрос № 226
Класс QTcpSocket содержит набор методов для работы с TCP (Transmition
Control Protocol, протокол управления передачей данных) — сетевым
протоколом низкого уровня, который является одним из основных
протоколов в Интернете. Это самый лучший способ для установления связи
между двумя компьютерами и передачи данных между ними с высокой
степенью надежности.
Класс QUdpSocket содержит набор методов для работы с UDP (User Datagram
Protocol, протокол пользовательских дейтаграмм). Этот сокет реализует
ненадежную передачу данных. Он не гарантирует доставки пакета, что
является одновременно и недостатком, и преимуществом, так как позволяет
быстрее и эффективнее доставлять данные для приложений, которым
необходима большая пропускная способность линий связи либо нужно
малое время доставки данных.
27.
Учебный вопрос № 3Модель «клиент-сервер».
27
28.
Учебный вопрос № 3Сценарий модели «клиент-сервер» выглядит очень просто: сервер предлагает
услуги, а клиент ими пользуется.
28
29.
Учебный вопрос № 329
30.
Учебный вопрос № 330
В библиотеке Qt есть модуль работы с сетью – Qt Network:
QT += network;
Модуль предоставляет ряд полезных классов, среди которых - QHttp,
QTcpSocket и QTcpServer.
Основная задача QTcpServer – отслеживать подключение клиентов. Сервер
слушает определенный порт, задаваемый при вызове метода listen. При
подключении клиента, вырабатывается сигнал newConnection и создается
сокет (QTcpSocket) для обмена данными с клиентом. Получить указатель на
сокет можно вызовом nextPendingConnection.
31.
Учебный вопрос № 3Реализация ТСР-сервера, Реализация ТСР-клиента
31
32.
Учебный вопрос № 3Реализация UDP-сервера и UDP-клиента
32
33.
Учебный вопрос № 333
Управление доступом к сети
Для того чтобы использовать классы высокого уровня, такие как QHttp и QFtp,
необходимо понимание концепций, которые за ними стоят.
Механизм управления доступом к сети обладает поддержкой куки (cookie), прокси
(proxy), кеширования данных, аутентификации и одновременной пересылкой запросов.
Три основных класса:
QNetworkAccessManager;
QNetworkRequest;
QNetworkReply.
Класс QNetworkAccessManager поддерживает такие операции, как:
♦ head — получение статуса;
♦ get — загрузка данных;
♦ put — пересылка данных;
♦ post — это гибрид get и put, предназначен только для HTTP.
34.
Учебный вопрос № 3Пример файлового загрузчика
34
35.
Учебный вопрос № 335
Класс QNetworkRequest содержит один подлежащий отправке запрос,
основной его компонент - URL. Этот класс содержит метаданные для запроса
— такие как, например, НТТР-заголовок и другие опции.
Класс QNetworkReply содержит данные ответа, метаданные URL, HTTPзаголовок и статус шифрования, условные ошибки и т. д.
Объекты этого класса отправляют сигналы:
♦ readyRead ( ) — при поступлении данных;
♦ finished ( ) — при завершении;
♦ error ( ) — если возникли проблемы;
♦ downloadProgress() и uploadProgress() — сигналы процесса загрузки.
36.
Учебный вопрос № 336
Блокирующий подход
Вы можете ждать до полного завершения операции и блокировать текущий поток
посредством вызова одного из методов, начинающегося с waitFor...
Большинство этих методов определено в классе QAbstractSocket и предназначено для
того, чтобы:
♦ waitForConnected ( ) — дождаться соединения;
♦ waitForReadyRead ( ) — дождаться поступления данных;
♦ waitForBytesWritten ( ) — дождаться, когда данные будут записаны;
♦ waitForDisconnected() — дождаться отсоединения;
♦ waitForEncrypted() — дождаться шифрования данных (только для QSslSocket).
37.
Учебный вопрос № 337
Режим прокси
В программах, работающих с сетью, очень часто требуется предусмотреть возможность
для того, чтобы пользователь мог установить соединение с сетью через прокси-сервер,
эта возможность нужна не только для анонимности, но так же связана с тем, что в
большинстве фирм, из соображений безопасности сети, нет другой возможности выхода
в Интернет, как только через прокси-сервер предприятия.
Для установки прокси-сервера можно воспользоваться классом QNetworkProxy.
QNetworkProxy proxy;
proxy.setType(QNetworkProxy::HttpProxy);
proxy.setHostName("192.168.178.1");
proxy.setPort(8080);
proxy.setUser("user");
proxy.setPassword("password");
QNetworkProxy::setApplicationProxy(proxy).
38.
Контроль освоения обучающимися учебного материалаКонтрольный вопрос № 1:
сформулируйте содержание понятия метаобъектная информация
информация о наследовании классов, которая позволяет определять являются ли
классы непосредственными наследниками (узнать имя класса), а также
предоставляет информацию о мета-методах класса
38
39.
Контроль освоения обучающимися учебного материалаКонтрольный вопрос № 2:
перечислите основные недостатки использования конструкции вызова
раздела библиотеки
отправка сигналов происходит немного медленнее, чем обычный вызов
функции, который производится при использовании механизма функций
обратного вызова;
существует необходимость в наследовании класса QObject;
в процессе компиляции не производится никаких проверок: имеется ли сигнал
или слот в соответствующих классах или нет; совместимы ли сигнал и слот друг с
другом и могут ли они быть соединены вместе.
39
40.
Задание на самостоятельную работуЗадание:
доработать конспект лекции, изучить подход к внедрению файлов-ресурсов в исполняемые
модули, с целью получения доступа к требуемым ресурсам при запуске приложения;
реализовать в программной среде (Qt Creator) связь разных виджетов между собой: добавить в
приложении три кнопки: увеличение на 1, уменьшение на 1 и сброса значения. Нажатие на эти
кнопки должно приводить к изменению значения на трех элементах управления (текстовое
поле, слайдер, переключатель).
Рекомендуемая литература:
1.
2.
3.
4.
5.
6.
Платонов А.А., Домбровский А.Ф. Методы программирования: курс лекций. Электронное
пособие. – СПб.: ВКА имени А.Ф. Можайского, 2016. – 171 с.
Технологии программирования: учебное пособие / В.В. Мышко, Д.Н. Бородько, В.В. Ткаченко.
– СПб.: ВКА имени А.Ф. Можайского, 2015. – 84 с.
Шлее М. Qt 5.10. Профессиональное программирование на C++. – СПб.: БХВ-Петербург, 2019.
– 912 с.
Программирование на языке С++ в среде Qt Creator: / Е.Р. Алексеев, Г. Г. Злобин, Д. А.Костюк,
О.В.Чеснокова, А.С.Чмыхало М. : ALT Linux, 2015. 448 с. : ил. (Библиотека ALTLinux).
Технологии разработки программного обеспечения: практикум / В.А. Мыльников, В.А.
Лохвицкий, А.С. Марковский. – СПб.: ВКА имени А.Ф. Можайского, 2016. – 150 с.
Qt Reference Documentation.
40
Программное обеспечение