5 votes

Threads, QRunnable et QThreadPool, je n'arrive pas à rentrer dans les détails

Je connais la théorie générale, Thread, QRunnable et QThreadPool. Comment tout cela s'intègre-t-il ? Je veux dire que lorsqu'une instance de QRunnable est créée, et assignée au ThreadPool, qu'est-ce que cela signifie de démarrer un thread ? Plusieurs threads peuvent-ils accéder à la même QRunnable ? Est-ce qu'un QRunnable correspond nécessairement à un thread de travail ?

12voto

Judge Maygarden Points 14964

QRunnable encapsule une tâche que vous souhaitez voir exécutée dans un thread séparé. Si vous avez besoin de savoir quel thread exécute cette tâche ou de la partager entre les threads, alors vous faites probablement quelque chose de plus compliqué que ce pour quoi QThreadPool est conçu. Dans ce cas, vous devez créer un comportement personnalisé en utilisant directement QThread. Le "démarrage" d'un QRunnable avec un QThreadPool est analogue à la mise en file d'attente de cette tâche pour un thread disponible dans le pool. En revanche, le démarrage d'un QThread alloue réellement un nouveau thread OS et l'exécute.

Le pool de threads gère un nombre fini de threads avec une file d'attente d'instances QRunnable. Lorsqu'un thread devient disponible, un QRunnable lui est attribué pour être traité. Vous n'avez pas besoin de créer explicitement des instances QThread si vous utilisez QThreadPool avec QRunnable. Notez que vous devez toujours vous assurer que les ressources partagées sont synchronisées (par exemple avec un QMutex, QMutexLocker, QReadWriteLock, QSemaphore, et/ou QWaitCondition) lorsqu'elles sont utilisées dans des instances QRunnable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X