qt - secreto - Orden de máquinas tragamonedas llamado QObject
cómo ganar en las máquinas del casino (4)
Tengo un QObject que tiene varias ranuras conectadas a una de sus señales. ¿Hay un orden en el que cada una de estas ranuras se llama cuando se emite la señal?
Confiar en el orden en que se ejecutarán las ranuras es una mala, mala idea, ya que anula el espíritu de las conexiones de señales / ranuras y te deja abierto para un comportamiento no deseado si haces cualquier tipo de conexiones programáticas de señales y ranuras.
De acuerdo con la documentación de Qt:
Si varias ranuras están conectadas a una señal, las ranuras se ejecutarán una después de la otra, en el orden en que se han conectado, cuando se emita la señal.
En Qt v4.5 y versiones anteriores: No, el orden no está definido como se puede ver en la documentación aquí :
Si hay varias ranuras conectadas a una señal, las ranuras se ejecutarán una tras otra, en un orden arbitrario, cuando se emita la señal.
Editar: a partir de la versión 4.6 esto ya no es cierto. Ahora las ranuras se ejecutarán en el orden en que están conectadas. El párrafo relevante de la documentación actual :
Si varias ranuras están conectadas a una señal, las ranuras se ejecutarán una después de la otra, en el orden en que se han conectado, cuando se emita la señal
Mientras que el orden no está definido, hasta ahora, en todas las versiones de Qt ha sido de connect()
, excepto cuando se usa Qt::QueuedConnection
, en cuyo caso, por supuesto, ni siquiera está garantizado que se hayan ejecutado alguno o todos los espacios. cuando se emit
devoluciones. Sin embargo, seguir desalentando la orden sigue siendo desalentador.