![]() |
Главная · Все классы · Основные классы · Классы по группам · Модули · Функции | ![]() |
[Предыдущая: API стилей в 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 предлагали возможность собрать библиотеку без поддержки потоков. В Qt 4 работа с потоками всегда включена.
Qt 3 имел класс с именем QDeepCopy для возможности получения копии общего объекта. В Qt 4 атомарный подсчет ссылок делает этот класс лишним.
[Предыдущая: API стилей в Qt 4] [Начало]
Copyright © 2008 Trolltech | Торговые марки | Qt 4.3.5 |