3

在这里读到QVector 类使用隐式数据共享来最大化资源使用并最小化复制。我不知道将带有 QVector 参数的信号发送到不同线程中的插槽是否会导致数据复制!这些问题也与这个问题有关:

通过信号/插槽将 QVector 从工作线程传递到主线程

在 Qt 信号中发射 QVector 引用会导致复制

但我无法从中得到意义。显然我的问题是:

我有一个信号:

void someSignal(QVector<int> values);

还有一个插槽:

void someSlot(QVector<int> values);

这些在不同的线程中,我将它们连接起来。所以连接类型是Qt::QueuedConnection。另外我应该声明 QVector 元素没有在插槽中修改。他们只是被阅读。

发出信号会导致 QVector 元素被复制吗?

4

1 回答 1

3

发出信号会导致 QVector 元素被复制吗?

不,隐式共享文档也很清楚:

隐式共享发生在幕后;程序员不需要担心它。即使在多线程应用程序中,也会发生隐式共享,如线程和隐式共享类中所述

只是为了突出文档该部分的第一段:

Qt 对其许多值类使用称为隐式共享的优化,特别是 QImage 和 QString。从 Qt 4 开始,隐式共享类可以安全地跨线程复制,就像任何其他值类一样。它们是完全可重入的。隐式共享确实是隐式的。

于 2014-03-15T08:55:40.077 回答