2012-02-01 5 views

Répondre

0

Poussez la méthode sur une file d'attente et ont le sit principal du fil et attendre sur cette file d'attente, l'exécution de chaque méthode car elle les retire.

0

Vous pouvez utiliser des variables de condition et demander à votre thread principal d'attendre un message du sous-thread. Le sous-thread peut signaler au thread principal d'appeler cette méthode.

+0

Merci pour vos réponses. Le problème est que je devrais tenir l'exécution de mon MainThread (qui contient une interface graphique Qt4) jusqu'à ce que le thread de travail soit terminé et que l'interface graphique ne réponde plus (Le thread de travail effectue un travail de base de données qui prend time) – forellenfuerst

+0

Voir ma réponse pour la solution spécifique de pyqt. Je pense que vous pourriez avoir besoin de lire un peu plus sur l'utilisation de pyqt – jdi

3

Vous n'avez pas mentionné intially que vous utilisez pyqt. Qt a des signaux et des slots intégrés juste à cet effet. Si vous lancez votre thread à l'aide de QThread, il a le signal 'terminé' auquel votre thread principal peut être connecté sur un slot. Si vous avez besoin d'encore plus de contrôle sur le signal résultant, vous pouvez en émettre un personnalisé avec la valeur que vous voulez. Lorsque vous construisez le fil, connectez simplement son signal à l'emplacement que vous voulez utiliser comme callback. Sinon, vous bloqueriez votre boucle d'événement principal si vous attendez spécifiquement le fil.

est ici un lien spécifiquement sur les nouveaux signaux de style/fentes: http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/new_style_signals_slots.html

Il rend extrêmement facile maintenant de créer un signal de python avec tout ce que la signature que vous voulez et le connecter d'une manière orientée objet à une fente. Également à titre indicatif à propos de PyQt ... Certaines des autres réponses suggèrent de créer une boucle sur votre thread principal qui attendra de recueillir les réponses dans une file d'attente à partir de ses threads distribués. C'est essentiellement ce que fait PyQt. Lorsque vous démarrez votre application, le thread principal va dans une boucle d'événement. Cette boucle d'événements traite les événements qui s'empilent dans sa file d'attente d'événements. Il existe différents types de connexions signal/fente. Si vos deux points d'extrémité sont dans le même thread, une connexion directe sera établie et le signal d'émission appellera l'emplacement. Si elles sont dans des threads différents, alors je crois qu'il passe par la boucle d'événements afin qu'il puisse être traité en dehors du thread émetteurs.

Questions connexes