将QVector从一个信号传递到不同线程中的插槽会导致数据复制吗?



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

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

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

但是我不能从中得到要点。显然我的问题是:

我有一个信号:

void someSignal(QVector<int> values);

和一个槽:

void someSlot(QVector<int> values);

它们在不同的线程中,我将它们连接起来。所以连接类型是Qt::QueuedConnection。我还应该说明,QVector元素在槽中没有被修改。它们只是被读取。

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

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

。隐式共享文档对此也很清楚:

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

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

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

最新更新