Влияет ли передача 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, неявные разделяемые классы можно безопасно копировать в потоки, как и любые другие классы значений. Они полностью возвращаются. Неявное разделение действительно неявно.

Другие вопросы по тегам