Bonsoir,
J’ouvre cette discussion car j’ai un souci avec les thread lorsque j’ouvre une fenêtre avec la fonction ouvre()
Contexte : j’ai une fenêtre d’accueil où j’ai plusieurs boutons permettant d’ouvrir d’autres fenêtres (contact, société etc.). J’ouvre toutes ces fenêtres avec ouvresoeur() uniquement car je souhaite pouvoir accéder à la fois à une fenêtre société et une fenêtre contact en même temps. Par contre dans ces fenêtres j’ouvre d’autres fenêtres de gestion du contact/société avec la fonction ouvre() car j’ai besoin des valeurs de retour pour mettre à jour ma fenêtre contact ou société. La fenêtre accueil ne peut pas être fermée tant qu’une autre fenêtre est ouverte, c’est la fenêtre mère.
Maintenant le problème, j’ai des rappels à afficher quand ils doivent être déclenchés. J’ai donc créer dans ma fenêtre accueil une fonction locale que j’ai paramétré comme étant un «*thread*» qui s’exécute à l’infini et toute les 5 minutes. Ce thread récupère les rappels à déclencher et s’il y en a, appelle une autre fonction local que j’ai paramétré comme «*thread principal*» et qui ouvre une fenêtre affichant dans une table les rappels déclenchés.
Cela fonctionne bien tant que je suis sur la fenêtre accueil ou sur une fenêtre ouverte avec ouvresoeur().
Par contre quand j’ouvre ensuite une fenêtre avec ouvre(), on dirait que le thread est mis en pause et attend que je ferme la fenêtre ouverte avec ouvre() avant de reprendre. En effet, ma fenêtre d’affichage des rappels apparaît pile quand je ferme la fenêtre et en mode debug, le code de mon thread est bien exécuté que quand je ferme la fenêtre.
Moi je souhaiterais que ma fenêtre affichant mes rappels s’ouvrent quoi qu’il arrive et non pas après la fermeture d’une fenêtre ouverte avec ouvre().
Ce que je comprend pas c’est que dans ma fenêtre accueil où j’ai lancé mon thread, toutes les fenêtres sont ouvertes avec ouvresoeur(), donc pourquoi la fonction ouvre() ensuite dans ces fenêtres sœurs ne bloque pas uniquement la fenêtre soeur appelante au lieu de tout le programme ?
J’ai aussi remarqué que si je suis sur une fenêtre soeur contact et une fenêtre soeur societe, si j’ouvre une fenêtre sur ces deux fenêtres en même temps (avec ouvre()), et que je ferme la première, la suite du code n’est pas exécuté tant que la seconde fenêtre n’est pas fermée.
Moi je souhaiterais que les fenêtres ouvertes avec ouvre() soient bloquantes uniquement pour la fenêtre appelante, et non pas pour tout le programme. Et du coup que mon thread qui tourne sur ma fenêtre d’accueil puisse bien appelé mon thread principal pour ouvrir ma fenêtre de rappel peu importe où je me trouve dans le logiciel. Je précise aussi que l’ouverture de la fenêtre des rappels se fait via ouvresoeur() comme pour l’ouverture des fenêtres contacts et sociétés.
J’espère avoir été assez clair, je découvre les threads donc peut être que j’ai mal fait quelque chose.
Si quelqu’un peut m’éclaircir et m’aider pour que mon thread puisse continuellement tourner sans interruption, que ma fenêtre de rappel puisse bien s’ouvrir automatiquement peu importe où je me trouve, et que les fenêtres ouvertes avec ouvre() bloquent uniquement la fenêtre appelante et pas les autres fenêtres sœurs, ça serait cool car je ne comprends pas et je n’ai plus de solution à tester là...
D’avance merci,
Bonne soirée
Cordialement
Partager