gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:21:31 25 4
gpt4 key购买 nike

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

Passing QVector from worker thread to main thread via signal/slot

Emitting QVector reference in Qt signal results in copy

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

我有一个信号:

void someSignal(QVector<int> values);

还有一个插槽:

void someSlot(QVector<int> values);

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

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

最佳答案

Does emitting the signal cause the QVector elements be copied?

没有。 implicit sharing documentation也很清楚:

Implicit sharing takes place behind the scenes; the programmer does not need to worry about it. Even in multithreaded applications, implicit sharing takes place, as explained in Threads and Implicitly Shared Classes.

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

Qt uses an optimization called implicit sharing for many of its value class, notably QImage and QString. Beginning with Qt 4, implicit shared classes can safely be copied across threads, like any other value classes. They are fully reentrant. The implicit sharing is really implicit.

关于c++ - 将 QVector 从信号传递到不同线程中的槽会导致数据复制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22421558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com