2010-02-25 4 views
0

J'ai une méthode threadSafe qui est appelée par plusieurs threads. Y a-t-il un moyen de savoir quel fil l'a appelé?Comment savoir quel thread appelé une méthode

+0

La plupart du temps, c'est une mauvaise idée de changer le comportement d'une méthode en fonction de l'identité de l'appelant. Qu'est-ce que vous essayez de faire cela devrait changer en fonction du thread dans lequel l'appelant s'exécute? S'il est raisonnable d'avoir besoin de le savoir, alors il y a généralement quelque chose de clairement lié à la question à passer. – PanCrit

+0

Fondamentalement, j'ai functionA qui utilise un QUDPSocket à writeDatagram et le signal readyRead est connecté à un slot readDatagram. Quand functionA est appelée depuis le mainthread, je ne veux pas que le signal soit émis ou que la méthode soit appelée (j'utilise readyread directement) mais je le fais quand il est appelé depuis qthread. La socket udp est dans le thread principal. –

+0

Vous ne pouvez pas casser la fonction A dans 2 fonctions ou plus? Alors le fil principal appelle seulement la "partie nécessaire" et les autres appellent la fonction complète? –

Répondre

3

Eh bien, vous savez le fil qui appelle la méthode, et par extension le même fil sera actif à l'intérieur cet appel de méthode. Vous pouvez simplement appeler QThread::currentThread() pour l'obtenir.

+0

en fait il n'y a pas de méthode appelée getCurrentThread mais il y a un static dans QThread appelé currentThread ... ill try it. –

+0

Ah oui, désolé - je pensais que le message original disait Java :) J'ai mal tourné currentThread en Java, il est en fait Thread.currentThread() ici aussi, euh :) En tout cas, heureux de mon poste aidé; On dirait que les deux API ont des classes/méthodes similaires de toute façon :) –

1

Si vous en avez besoin, vous pouvez ajouter un paramètre threadId, et laissez-fil Faites passer à la méthode

+0

ouais je le savais mais je voulais minimiser l'intervention de l'utilisateur afin de ne laisser personne appeler la fonction de la mauvaise façon, maintenant l'utilisateur doit savoir si c'est un appel mainthread ou qthread. Donc, il faudrait ajouter ce paramètre seulement quand on travaille dans le qthread –

Questions connexes