Qt Signaux et Slot connecté à deux fois... ce qui se passe?
Qu'advient-il si le même signal et slot est connecté deux fois?
Comment est le mécanisme manipulés?
Vous devez vous connecter pour publier un commentaire.
Qu'advient-il si le même signal et slot est connecté deux fois?
Comment est le mécanisme manipulés?
Vous devez vous connecter pour publier un commentaire.
Il y A quelques semaines, nous avons eu un stagiaire accidentellement connecter un signal à un slot plus d'une fois. L'idée était que sous une seule condition, vous auriez le slot connecté au signal, et en vertu d'une autre maladie, vous auriez du le débrancher. Lorsque vous avez modifié les modes, vous feriez un travail adapté.
Bien, il a oublié de débrancher le cas échéant. Donc, à chaque fois que vous avez changé les modes, vous avez eu une nouvelle connexion à la fente.
Le résultat final? 1 connexion == 1 appel à fente. 2 connexions == 2 appels à fente. 3 connexions == 3 appels vers le logement, etc. Ces appels qui s'est passé "simultanément" (je sais que dans la réalité ils n'ont pas puisqu'ils sont sur le même événement de fil, mais ce que je veux dire a tous les appels ont été traités dans la succession).
Comme @Travail souligne dans un de ses commentaires (il le mérite, merci donc de ne pas upvote moi pour son travail),
Qt::UniqueConnection
permettra d'éviter ce problème.Qt::UniqueConnection
quand vous avez dit.Généralement de mauvaises choses. Il est parfaitement acceptable pour connecter le logement de deux ou même plusieurs fois, mais quand le signal est déclenché votre logement sera appelée pour chaque connexion que vous faites, ce qui n'est probablement pas ce que vous voulez.
Noter qu'il n'est pas forcément mauvais d'avoir de multiples connexions. Il y a (probablement) parfaitement valide utilise pour elle. Ils sont assez rares, je ne peux certainement pas penser à toutes les fois que je l'ai utilisé comme une caractéristique. Toutes les situations que je peux me rappeler où il y avait une connexion multiple s'est avéré être un bug plutôt que prévu.
Le logement est exécutée plusieurs fois (comme d'autres déjà dit).
Peu plus de notes:
Qt::UniqueConnection
peut être utilisé pour patch bâclée asymétrique code plus de fois qu'il est utilisé à aucune autre fin.