Lorsque je suis dans le thread de main() et que mon objet Runner est dans le thread B:
La doc dit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 // Thread main() avec une QEventLoop qui tourne Runner runner; QThread threadB; runner->moveToThread(&threadB); threadB.start(); // Long traitement, des choses se passent aussi dans le thread B QMetaObject::invokeMethod(&runner,"process",Qt::QueuedConnection); // Long traitement
Donc quand je demande d'invoquer la fonction"process" avec invokeMethod, Qt ajoute un évènement à l'event loop du thread B (pour exécuter la fonction "process") qui sera exécuté une fois que le thread B retournera dans son event loop.Qt::QueuedConnection : The slot is invoked when control returns to the event loop of the receiver's thread. The slot is executed in the receiver's thread.
Ce que je me demande c'est à quel moment cet évenement est ajouté à l'event loop du thread B?
1) Directement à la ligne QMetaObject::invokeMethod...? Cela veut dire que le thread de main() accède à des ressources du thread B alors qu'il travaille peut être. Les event loop de Qt sont peut être thread safe?
2) Au retour à l'event loop du thread main()? Ca ne change rien.
3) Au retour à l'event loop du thread B? Ce qui m'étonnerait, le thread de main() devrait alors attendre le bon moment.
Merci d'avance.
Partager