Home · All Classes · Main Classes · Grouped Classes · Modules · Functions

[Предыдущая: 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 © 2005 Trolltech Trademarks
Qt 4.1.0
Hosted by uCoz