Потоки и многопоточность 10

Заметки по языку с и с++

QProcess: запуск внешних программ и обмен данными через stdin/stdout

Введение Многие приложения должны взаимодействовать с внешними программами: запускать утилиты командной строки, конвертеры, компиляторы, скрипты. В Qt для этого есть класс QProcess, который запускает внешний процесс и предоставляет…

Потоки и многопоточность

Параллельная обработка больших коллекций данных через QtConcurrent::map и reduce

Введение Когда нужно применить одну и ту же операцию к каждому элементу большой коллекции (например, изменить размер тысяч изображений или провести вычисления над массивом данных), часто такая обработка…

Потоки и многопоточность

Таймеры QTimer в многопоточном окружении: подводные камни

Введение QTimer — один из самых часто используемых классов Qt, но его поведение в многопоточном контексте вызывает регулярную путаницу: таймер привязан к event loop конкретного потока, и попытка…

Потоки и многопоточность

Producer-Consumer на QWaitCondition: классический паттерн в Qt-коде

Введение Паттерн «производитель-потребитель» — один из самых распространённых в многопоточном программировании: один или несколько потоков генерируют данные (производители) и помещают их в общую очередь, а другой поток (или…

Потоки и многопоточность

QAtomicInt и lock-free операции в Qt: когда обойтись без мьютексов

Введение Мьютексы и семафоры решают задачу синхронизации универсально, но не бесплатно: захват и освобождение блокировки — это системный вызов (в худшем случае) с накладными расходами и потенциальным переключением…

Заметки по языку с и с++

Потокобезопасные структуры данных в Qt-приложениях: паттерны и ошибки

Введение При переходе от однопоточного кода к многопоточному самая частая ошибка — продолжать использовать обычные контейнеры (QVector, QList, QMap, std::vector) из нескольких потоков без какой-либо синхронизации, считая их…

Потоки и многопоточность

QSemaphore vs QMutex: разница и типичные сценарии использования

Введение QMutex и QSemaphore — два базовых примитива синхронизации в Qt, и начинающие разработчики иногда путают, когда применять каждый из них. Если упростить: мьютекс защищает критическую секцию от…

Потоки и многопоточность

QFuture и QtConcurrent: асинхронные вычисления без ручного управления потоками

Введение Модуль QtConcurrent предоставляет высокоуровневый API для параллельных вычислений, скрывающий детали создания и синхронизации потоков. Вместо явного создания QThread или QRunnable достаточно вызвать функцию вроде QtConcurrent::run(), передав ей…

Потоки и многопоточность

Сигналы и слоты между потоками: Qt::QueuedConnection на практике

Введение Одна из сильных сторон сигнально-слотовой системы Qt — она прозрачно работает между потоками, если объекты-получатели «живут» (имеют affinity) в разных потоках. Это решает классическую проблему многопоточного программирования:…