Les Thread et les Windows Form

Zerratul Messages postés 2 Date d'inscription jeudi 20 avril 2006 Statut Membre Dernière intervention 27 avril 2006 - 20 avril 2006 à 16:08
olbal Messages postés 20 Date d'inscription vendredi 16 mai 2003 Statut Membre Dernière intervention 29 septembre 2006 - 27 avril 2006 à 12:45
Bonjour, je dévelloppe une application basé sur des Windows Form sous Visual C++ 2005 Express. Pour le moment, je souhaite juste apprendre comment créer des Threads qui vont réaliser un travail simple : Compter. Autrement dit, j'ai crée un projet vierge composé d'une seule fenêtre nommée Form1. A cette fenêtre j'ajoute quelques éléments graphiques, deux textLabel (nommés label1 et label2) et un bouton.
Mon objectif est simple, je veux que deux thread différents comptent jusqu'à 10 à des vitesse différentes, et que ce comptage soit visible sur les deux textLabel. Autrement dit un premier thread compte jusqu'à 10 en mettant à jour le label1 toutes les secondes et une second thread va compter jusqu'à 10 en mettant à jour label2.

Jusque-là pas de problèmes. Mais je suis confronté à un problème assez agaçant. En effet, le thread 0 compte sans problèmes et met à jour le label 1 comme prévu. Mais quand je crée le deuxième thread, je suis obligé de faire appel à une fonction statique (c'est obligé, d'après la msdn). Le problème étant que dans cette fonction statique, il m'est impossible de mettre à jour ou d'utiliser des éléments graphiques comme des textLabel qui sont, à l'instar de tous les élements graphiques de la fenêtre, crées dynamiquement.

Au final, ma question serait en fait : Est-ce qu'il est possible de créer des threads qui pourraient interragir avec des éléments graphique d'une Windows Form ?

J'ai essayé d'être le plus clair possible, mais étant un débutant dans le domaine (étudiant), c'est pas forcément évident.

Merci d'avance pour votre future aide, vos pistes ou vos conseils

2 réponses

Zerratul Messages postés 2 Date d'inscription jeudi 20 avril 2006 Statut Membre Dernière intervention 27 avril 2006
27 avril 2006 à 10:55
Personne ne peux m'aider ?
0
olbal Messages postés 20 Date d'inscription vendredi 16 mai 2003 Statut Membre Dernière intervention 29 septembre 2006
27 avril 2006 à 12:45
Je connais pas du tout VC++2005 mais au pire, rien t'empéche une fois l'initialisation de ta fenêtre terminée, de copier dans des variables statiques les pointeurs qui t'interessent pour pouvoir les utiliser ton ta fonction statique.Il faut bien faire attention à que ces pointeurs ne changent pas pendant que le thread tourne ou alors prèvoir un système de synchro. Il faut aussi être sur que le thread soit terminé avant de détruire la fenêtre...
Si la fonction de creation de thread ressemble à celle de l'API windows, elle doit permettre de passer un pointeur à la fonction statique de type void*, tu peux alors passer par exemple soit l'adresse de l'objet qui gère la fenêtre ou l'adresse d'une structure qui contient les pointeurs qui t'interesse est cela sera plus propre et plus réutilisable que de faire ça avec des variables statiques.
Mais avant tout, est tu sur que les fonctions des objets graphiques peuvent être appelées depuis un autre endroit que le thread principale de l'application? Avec les fonctions natives de windows (par ex SetWindowText) pas de problème, mais c'est pas dit que ça soit pareil avec ta librairie d'objets.
0
Rejoignez-nous