2
許多QT例子做了以下事情:Qt的:信號時隙通通過const引用
signal: passByConstRef(const QImage &)
slot: receivedByConstRef(const QImage &)
它們通過在不同的線程排隊連接進行連接。 在線程1:
{QImage image;
image = fromData(...);
emit passByConstRef(image);
}
在線程2:
receivedByConstRef(const QImage& image){
...
pixmap = fromImage(image);
...
}
由於信號時隙由常量參考,這意味着沒有複製的發生,使QImage的纔有可能的是,當「像素映像」正在構建中,線程1中「圖像」的生命週期結束並導致在線程2中構建「像素映射」失敗。
所以它被改變爲在qt內傳遞值?並且沒有必要爲「圖像」添加任何互斥體? – Nyaruko 2015-02-08 14:41:31
是的,它會被複制。不需要互斥體。 – Nejat 2015-02-08 15:50:07
雖然副本確實發送,但此處提供的說明是錯誤的。 1)隊列連接總是複製參數。無論它們是通過值還是通過(const)引用傳遞都沒關係。 2)規範化簽名與此無關。 – peppe 2015-02-08 19:02:30