Поддержка потоков в Qt 4Qt 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 атомарный подсчет ссылок делает этот класс лишним. |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |