许多qt示例做了以下事情:
signal: passByConstRef(const QImage &)
slot: receivedByConstRef( const QImage &)
它们通过不同线程中的排队连接进行连接.
在主题1中:
{QImage image;
image = fromData(...);
emit passByConstRef(image);
}
在主题2中:
receivedByConstRef(const QImage& image){
...
pixmap = fromImage(image);
...
}
由于信号槽通过const Ref传递QImage,这意味着没有复制发生,有可能在构建“pixmap”时,线程1中“图像”的生命周期结束并导致构造失败线程2中的“pixmap”.
解决方法:
通过引用传递参数时,将在排队连接中发送副本.实际上,当您有排队连接时,始终会复制参数.所以这里的图像的生命周期没有任何问题,因为它将被复制而不是通过引用传递.
本文探讨了Qt中使用constRef传递QImage可能导致的问题,即线程间图像生命周期管理,以及如何避免构造失败。通过解释复制行为和解决方法,提供了解决线程间QImage传递问题的建议。
428

被折叠的 条评论
为什么被折叠?



