Qt:Документация 4.3.2/qt4-threads
Материал из Wiki.crossplatform.ru
Внимание: Актуальная версия перевода документации находится здесь |
__NOTOC__
Главная · Все классы · Основные классы · Классы по группам · Модули · Функции |
[Предыдущая: 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
|