Question sur la mise en œuvre QThread
-
20-09-2019 - |
Question
Un objet QThread représente un seul fil d'exécution. Mais le thread OS créé lorsque l'objet QThread est créé, ou lorsque la méthode est appelée start()
?
Je suis intéressé à savoir si je peux avoir plusieurs objets QThread qui traînent, et le système d'exploitation de créer des fils sur start()
et les tuer après le retour de run()
, puis je peux réutiliser les objets QThread à nouveau. Mais je ne veux pas détenir des ressources OS alors que les objets QThread ne font rien.
(pour mémoire, je suis au courant de QtConcurrent et QThreadPool, et non, ils ne répondent pas à mes besoins dans cette situation)
La solution
Linux l'objet thread est créé (par pthread_create
) au cours du procédé de QThread::start
. Il semble peu près la même avec Windows.
Vous pouvez voir ici la source:
Unix: http: // qt. gitorious.org/qt/qt/blobs/master/src/corelib/thread/qthread_unix.cpp (ligne 542).
Fenêtres: http: // qt. gitorious.org/qt/qt/blobs/master/src/corelib/thread/qthread_win.cpp (ligne 419).