Question

documentation QThread::terminate() indique qu'il est déconseillé de mettre fin à un fil en appelant cette fonction.
Dans mon programme, je dois mettre fin à un fil avant qu'il termine l'exécution. Le fil effectue quelques calculs lourds et je veux que l'utilisateur d'avoir un contrôle pour arrêter le calcul.
Comment puis-je faire cela au lieu d'appeler QThread::terminate()?

Était-ce utile?

La solution

Définir un indicateur de l'extérieur du fil qui est vérifié par le calcul à l'intérieur du fil et arrêter le calcul si l'indicateur est défini.

Autres conseils

En utilisant des drapeaux est une façon évidente et la plus courante de faire l'affaire, mais si vous travaillez sur une plate-forme linux / unix je vous conseille d'utiliser des tuyaux à la place. J'ai eu le même problème où je un drapeau (ce qui rend le code threadunsafe et bogues résultant d'un tel indicateur sont difficiles à tracer), puis je l'ai changé la mise en œuvre d'utiliser des tuyaux qui étaient un moyen efficace de faire le nécessaire.

Si vous voulez, pour une plate-forme Linux je peux vous montrer comment utiliser des tuyaux pour mettre fin à une QThread.

Vous pouvez également avoir des fenêtres équivalent de tuyaux, que je ne connais pas grand-chose au sujet que je ne l'ai pas fait beaucoup de programmation sur la plateforme Windows.

Hope this helps

Le mieux est d'utiliser le drapeau + mutex qui fera le fil de solution sûre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top