Prenons un fil de travail auquel on accède à partir d'une grande variété d'objets. Cet objet worker possède quelques slots publics, donc toute personne qui connecte ses signaux aux slots du worker peut utiliser emit
pour déclencher les tâches utiles du fil de travail.
Ce fil de travail doit être presque global, dans le sens où plusieurs classes différentes l'utilisent, certaines d'entre elles étant situées très loin dans la hiérarchie (enfant d'un enfant d'un enfant de l'application principale).
Je pense qu'il y a deux grandes façons de procéder :
-
Toutes les méthodes des classes enfantines transmettent leurs messages vers le haut de la hiérarchie par le biais de leurs valeurs de retour, et laissent l'objet principal (par exemple, l'interface graphique) se charger de l'émission.
-
Toutes les classes qui requièrent les services du fil de travail ont un pointeur sur l'objet Worker (qui est un membre de la classe principale), et toutes les classes ont un pointeur sur l'objet Worker.
connect()
dans leurs constructeurs. Chacune de ces classes effectue alors l'émission par elle-même. Fondamentalement, l'injection de dépendance.
L'option 2. me semble beaucoup plus propre et flexible, je crains seulement qu'elle ne crée un nombre énorme de connexions. Par exemple, si j'ai un tableau d'un objet qui a besoin du thread, j'aurai une connexion séparée pour chaque élément du tableau.
Existe-t-il un moyen "officiel" de faire cela, comme les créateurs de Qt l'ont prévu ?