Probleme thread: fenetre gelee

wiool Messages postés 7 Date d'inscription jeudi 10 février 2005 Statut Membre Dernière intervention 2 juin 2005 - 1 juin 2005 à 18:13
cs_poppyto Messages postés 540 Date d'inscription dimanche 29 décembre 2002 Statut Modérateur Dernière intervention 13 mai 2011 - 1 juin 2005 à 20:54
Salut a tous,

J'ai un ptit probleme avec des thread:
J'ai mon prog principal qui appelle un thread qui va regulirement (5sec) verifier s'il faut pas rendre un des panels visible et qui le rend visible si besoin.
Mais voila, ca marche bien pour rendre le panel visible, mais quand ThreadTask(); est rapele (apres 5sec) ca fait tout planter.... C'est quoi le probleme ??



public
__gc
class Form1 :
public System::Windows::Forms::Form
{

Thread* checkNewClients;

private: System::Windows::Forms::Panel * pnl_user2;

// Ici j'initialise mon pnl_user2

private: System::Void form1_Load(System::Object * sender, System::EventArgs * e)
{


ThreadStart *myThreadDelegate =
new ThreadStart(
this, repeat);
checkNewClients =
new Thread(myThreadDelegate);
checkNewClients->IsBackground =
true;
checkNewClients->Start();

}


__delegate void DelegateThreadTask();

private: void ThreadTask(){

if(this->pnl_user1->Visible==false) {

this->pnl_user2->Visible=true;
t
his->Refresh();

}
}


private: void repeat()
{

while(true)
{

ThreadTask();

Thread::Sleep(5000);

}

}
}

5 réponses

cs_poppyto Messages postés 540 Date d'inscription dimanche 29 décembre 2002 Statut Modérateur Dernière intervention 13 mai 2011
1 juin 2005 à 20:22
>>> ca fait tout planter.... C'est quoi le probleme ??

Pas de problème apparant...utilises le debug de vs.net, il y a probablement un pointeur nul qui rode (cauchemard de programmeur ? :D )

Stef
http://www.poppyto.net LE site pour les bassistes
0
wiool Messages postés 7 Date d'inscription jeudi 10 février 2005 Statut Membre Dernière intervention 2 juin 2005
1 juin 2005 à 20:33
Je crois avoir pige le probleme: on peux pas modifier un form depuis un autre thread que celui qui cree le form.
Donc, si j'ai bien compris, il faudrais utiliser des delegates et de MethodInvoker... (dites moi tout de suite si j'ai tort)
J'ai cherche sur google un exemple et j'en ai plein, mais en VB et C#, jamais en c++... et j'ai bien essaye d'adapter mais je bug sur
MethodInvoker mi = new MethodInvoker(form.control);
en c++ il me demande 2 parametre au constructeur de MethodInvoker.... c'est quoi ????
Un peu de code ca fera pas de mal, voila ce que j'essaie de faire maintenant (et arretez moi si je me plante de dirsction, ca m'evitera de perdre trop de temps )


__delegate void DelegateThreadTask();

private: void ThreadTask(){

if(this->pnl_user1->Visible==false) {

this->pnl_user2->Visible=true;
t
his->Refresh();

}
}


private: void repeat()
{

MethodInvoker* mi = new MethodInvoker( JEMETKOIICI ????? , this->DelegateThreadTask); <-- le probleme maintenant

while(true) {
this->BeginInvoke(mi);

Thread::Sleep(5000);

}

}

merci merci
0
cs_poppyto Messages postés 540 Date d'inscription dimanche 29 décembre 2002 Statut Modérateur Dernière intervention 13 mai 2011
1 juin 2005 à 20:43
Control.Invoke semble mieux convenir ?

http://www.poppyto.net LE site pour les bassistes
0
wiool Messages postés 7 Date d'inscription jeudi 10 février 2005 Statut Membre Dernière intervention 2 juin 2005
1 juin 2005 à 20:49
OUF J'ai trouve...
Pour un tutorial alez voir la: http://www.kbalertz.com/kb_816177.aspx
Pour info, j'ai bien utilise le MethodInvoker:


MethodInvoker* mi =
new MethodInvoker(0,
this->UpdateUsers);

Mais vus que le premier parametre est 0, il faut passer le nom d'une fonction static en deuxieme parametre, et vu que une fonction statique n'accede qu'a des objets statique, j'ai declare un

static Form1 myForm;

Auquel ensuite je donne le form courant (this)....

et donc je peux acceder a tout mes objets de formulaire depuis ma fonction DelegateThreadTask : OUF

Merci poppyto pour ton aide,

a-+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_poppyto Messages postés 540 Date d'inscription dimanche 29 décembre 2002 Statut Modérateur Dernière intervention 13 mai 2011
1 juin 2005 à 20:54
Mouai je suis pas convaincu par la pertinance de MethodInvoker pour ce problème:

ceci : http://www.csharpfr.com/code.aspx?ID=29068
ça a l'air beaucoup plus sympa non ?

Bonne chance ^^

http://www.poppyto.net LE site pour les bassistes
0
Rejoignez-nous