Процессы и потоки в Qt


Процессы представляют собой программы, независимые друг от друга и загруженные для исполнения. Каждый процесс должен создавать хотя бы один поток, называемый основным. Основной поток процесса создается в момент запуска программы. Однако сам процесс может создавать несколько потоков одновременно.

Многопоточность позволяет разделять задачи и независимо работать над каждой из них для того, чтобы максимально эффективно задействовать процессор. Написание многопоточных приложений требует больше времени и усложняет процесс отладки, поэтому многопоточность нужно применять тогда, когда это действительно необходимо. Многопоточность удобно использовать для того, чтобы блокировка или зависание одного из методов не стали причиной нарушения функционирования основной программы.

Для использования многопоточности нужно унаследовать класс от QThread и перезаписать метод run(), в который должен быть помещен код для исполнения в потоке. Чтобы запустить поток, нужно вызвать метод start().

Связь между объектами из разных потоков можно осуществлять при помощи сигналов и слотов или посредством обмена объектами событий.

При работе с потоками нередко требуется синхронизировать функционирование потоков. Причиной синхронизации является необходимость обеспечения доступа нескольких потоков к одним и тем же данным. Для этого библиотека Qt предоставляет классы QMutex, QWaitContion и QSemaphore.

В целях эффективности не все классы Qt обладают механизмом надежности для потоков.

Читать далее: QProcess – процессы в Qt