Влияет ли передача QVector с сигнала на слот в разных потоках копированием данных?
Я читал здесь, что класс QVector использует неявный обмен данными, чтобы максимально использовать ресурсы и минимизировать копирование. Я не знаю, вызывает ли копирование данных сигнал с параметром QVector в слот в другом потоке! Эти вопросы также относятся к этой проблеме:
Передача QVector из рабочего потока в основной поток через сигнал / слот
Излучение эталона QVector в сигнале Qt приводит к копированию
Но я не мог понять суть из них. ясно мой вопрос:
У меня есть сигнал:
void someSignal(QVector<int> values);
И слот:
void someSlot(QVector<int> values);
Это в разных темах и я их подключаю. поэтому тип соединения - Qt::QueuedConnection. Также я должен заявить, что элементы QVector не изменяются в слоте. Они только что прочитаны.
Из-за испускаемого сигнала копируются элементы QVector?
1 ответ
Из-за испускаемого сигнала копируются элементы QVector?
Нет. Документация о неявном обмене также ясна:
Неявное разделение происходит за кулисами; программисту не нужно беспокоиться об этом. Даже в многопоточных приложениях происходит неявное совместное использование, как описано в "Потоках" и "Неявно общих классах".
Просто выделите первый абзац из этой части документации:
Qt использует оптимизацию, называемую неявным разделением, для многих его классов значений, особенно QImage и QString. Начиная с Qt 4, неявные разделяемые классы можно безопасно копировать в потоки, как и любые другие классы значений. Они полностью возвращаются. Неявное разделение действительно неявно.