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

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

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

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

Общий обзор

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

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

Цикл обработки событий потока делает возможным использование потоком некоторых неграфических классов 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 © 2008 Trolltech Торговые марки
Qt 4.3.5