Добавил:
Только когда поступишь в технический вуз поймешь на сколько ты гуманитарий Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Дополнительные материалы.pdf
Скачиваний:
3
Добавлен:
07.06.2025
Размер:
12.29 Mб
Скачать

РАЗРАБОТКА НА QT ДЛЯ МОБИЛЬНЫХ УСТРОЙСТВ

РЕКОМЕНДУЕМЫЕ РЕШЕНИЯ ДЛЯ НЕКОТОРЫХ ПРИМЕРОВ

ВРЕМЯ

ЖИЗНИ

Операция

 

 

 

Решение

 

 

ПОТОКА

 

 

 

 

 

 

 

 

Один вызов

 

Запуск новой функции в другом потоке

QThread,

 

QThreadPool,

 

 

 

 

 

 

QtConcurrent::run()

 

 

 

Запуск существующей

функции в

QtConcurrent::run()

 

Один вызов

 

другом потоке и получение ее

 

 

 

возвращаемого значения

 

 

 

 

 

 

 

 

 

 

 

Один вызов

 

Операция

по

всем

элементам

QtConcurrent filter() и map()

 

 

контейнера

 

 

 

 

 

 

Один

 

Долгое вычисление в приложении QML

WorkerScript

 

 

вызов/Постоянно

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Объект в другом потоке, выполняющий

Создайте подкласс QObject, который будет

Постоянно

 

задачи по запросу и / или получающий

выполнять эти задачи и QThread.

 

 

новые данные

 

 

Отправляйте данные через сигналы

 

 

 

 

 

 

 

 

Выполнение операции в другом потоке,

Бесконечный

цикл

непосредственно

Постоянно

 

где поток не требует приема каких-

в реализации QThread::run()

 

 

либо сигналов или событий.

 

 

 

РАЗРАБОТКА НА QT ДЛЯ МОБИЛЬНЫХ УСТРОЙСТВ

СИГНАЛЫ И СЛОТЫ В ПОТОКАХ

connect(..., Qt::ConnectionType type)

Auto Connection (по умолчанию): Если сигнал испускается в потоке, который содержит объект-приемник, то поведение такое же, как в Direct Connection

» Иначе поведение будет таким же, как и в Queued Connection

Direct Connection: Слот вызывается немедленно, когда сигнал испускается

Queued Connection: Слот вызывается, когда управление возвращается в цикл событий потока получателя

Blocking Queued Connection: Слот вызывается как для Queued Connection, но текущий поток блокируется до тех пор, пока слот не вернется

Unique Connection: Соединение выполняется только в том случае, если оно не дублирует существующее соединение

doc.qt.io/archives/qt-5.6/threads-qobject.html

РАЗРАБОТКА НА QT ДЛЯ МОБИЛЬНЫХ УСТРОЙСТВ

ЦИКЛ ОБРАБОТКИ СОБЫТИЙ ПОТОКА

Каждый поток может иметь свой собственный цикл событий

Экземпляр QObject находится в потоке, в котором он создан

Вызов delete в QObject из потока, который не владеет объектом, небезопасен

Если цикл событий не запущен, события не будут переданы объекту

С QCoreApplication::postEvent() можно публиковать события в любом объекте в любом потоке в любое время

РАЗРАБОТКА НА QT ДЛЯ МОБИЛЬНЫХ УСТРОЙСТВ

ОЧЕРЕДИ СОБЫТИЙ ВЫСОКОГО УРОВНЯ

connect(..., Qt::ConnectionType type)

Чтобы поместить вызов в цикл событий, соедините сигнал и слот с помощью типа связи Qt::QueuedConnection

При использовании системы событий для синхронизации потоков нет риска блокировок

Чтобы вызвать слот в другом потоке, поместите этот вызов в цикл событий целевого потока: соедините сигнал и слот с помощью типа связи

Qt::QueuedConnection

АЛЬТЕРНАТИВЫ ПОТОКАМ И СОВЕТЫ

ПО МНОПОТОЧНОЙ 10 РАЗРАБОТКЕ