Qt:Документация 4.3.2/qt4-threads

Материал из Wiki.crossplatform.ru

Перейти к: навигация, поиск
40px Внимание: Актуальная версия перевода документации находится здесь

__NOTOC__

Image:qt-logo.png

Главная · Все классы · Основные классы · Классы по группам · Модули · Функции

Image:trolltech-logo.png

[Предыдущая: API стилей в Qt 4 ] [ Начало ]

Поддержка потоков в Qt 4

Qt 4 реализует поддержку потоков для облегчения многопоточного программирования. Большое количество классов сделано годным для использования не-GUI потоками, механизм сигналов и слотов теперь может устанавливать связи между потоками.

Общий Обзор

QThread теперь наследуют QObject. Он испускает сигналы, сообщающие о том, что поток начал или закончил работу, а также предоставляет несколько слотов.

Каждый поток может иметь собственный цикл обработки сообщений. Главный поток начинает цикл обработки сообщений, используя QCoreApplication::exec(); другие потоки могут начать свои циклы обработки сообщений, используя QThread::exec(). Подобно QCoreApplication, QThread акже предоставляет функцию exit(int) и слот quit().

Цикл обработки сообщений сделан возможным для потока, чтобы можно было использовать некоторые не-GUI классы Qt которые требуют наличия цикла обработки сообщений (такие как QTimer, QTcpSocket и QProcess). Это также даёт возможность соединить сигналы из любых потоков со слотами в определённом потоке. Слот не вызывается немедленно после испускания сигнала, а лишь после передачи управления циклу обработки сообщений потока, которому принадлежит слот. Слот выполняется в потоке, в котором находится объект-приемник. Для получения более подробной информации смотрите QObject::connect().

Qt 4 также включает новый класс синхронизации: QReadWriteLock. Он подобен QMutex за исключением того, что делает различие между доступом для "чтения" и "запися" к общим данным и позволяет множеству пользователей одновременно работать с данными. По возможности используя QReadWriteLock вместо QMutex можно сделать многопоточную программу более параллельной.

С тех пор как Qt 4 стал использовать неявный совместный доступ, классы могут легко перемещаться между потоками подобно любым другим значениям классов. Они полностью допускают повторное вхождение. Это реализовано с использованием атомарных действий подсчета ссылок на ассемблере для различных платформ, поддерживаемых Qt. Атомарный подсчёт ссылок очень быстр, он намного быстрее использования мьютексов.

Для получения более полной информации смотрите Поддержка потоков в Qt.

Сравнение с Qt 3

Более ранние версии Qt предлагали возможность постройки библиотеки без поддержки потоков. В Qt 4 работа с потоками всегда включена.

Qt 3 имел класс с именем QDeepCopy для возможности получения копии общего объекта. В Qt 4 атомарный подсчет ссылок делает этот класс лишним.

[Предыдущая: API стилей в Qt 4 ] [ Начало ]



Copyright © 2007 Trolltech Trademarks
Qt 4.3.2