在Qt中通过一个信号将数据传递到多个插槽是否安全?

Gur*_*ngh 5 qt

我的Qt应用程序不断从服务器端接收数据包,并基于数据构造对象。我必须将这些对象(一次一个)传递给三个不同的小部件。因此,我已经将一个信号连接到所有三个小部件的插槽,但是我怀疑传递这样的对象是否安全?假设数据包到达的速度很快,这些数据包会被新的数据包覆盖吗?对象是否会因此而损坏或在处理较旧的数据包时丢失一些数据包或数据。

是否有一种机制可以确保不会发生超限。另外,如果数据包以非常快的速率传输,将会有一些节流。

Mar*_*ett 6

将单个信号连接到多个插槽是Qt的设计功能。

所有(几乎?)Qt 值类都是引用计数的,因此可以随意传递它们。它们大多也是“写时复制”的,因此您可以在任何需要的地方随意复制它们,而不会造成实际性能损失。

像任何其他多线程代码一样,如果多个线程同时写入同一对象,则需要小心。

  • “所有(几乎?)Qt对象都计算了一个引用” –校正:所有Qt值类都进行了引用计数(诸如QString,QImage,QHash等),而QObject实例通常是由指针传递,因为它们不可复制。 (3认同)