Bonsoir,
Cela fait quelques temps que je réfléchis à un problème auquel je ne trouve pas la réponse, je viens donc vers vous pour cela. J'expose le problème :
Soient deux threads, le thread A et le thread B. Le thread A correspond au main thread de l'application, le thread B correspond à un thread des plus communs. Avant d'effectuer une longue boucle, le thread A lance le thread B qui doit effectuer des opérations pendant toute la durée d'exécution de la boucle dont il est question. Or, le thread A ne va logiquement pas laisser le thread B agir, utilisant la totalité des ressources dont l'application peut bénéficier, on aura donc une ligne d'exécution en fonction du temps comme celle-ci :
Avec la ligne des | = exécution, et la ligne des X = thread en attente.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 A Appel ---- B | | | X | X | X | X | X | X | X | X Fin | | | | | | | | Fin
Ce que je souhaiterais avoir est ceci :
Pour éviter que le thread A bloque le thread B durant la grosse boucle, j'ai pensé à tenter de lui baisser sa priorité :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 A Appel ---- B | | | | | | | | | | | | | | | | | | Fin Fin
Sans effet notable, le thread A bloque toujours le thread B.
Code : Sélectionner tout - Visualiser dans une fenêtre à part QThread::currentThread()->setPriority(QThread::IdlePriority);
J'ai tenté pas mal d'autres choses, sans succès non plus. Bref, si vous avez une idée, si vous manquez d'informations ou autre, n'hésitez pas à poster !
Merci d'avance,
Amnell.
Partager