Bonjour a tous,
voila je voudrais savoir si lors de la création d'un thread dans sa méthode execute, on pouvait créee un objet.
Je fais cela afin d'améliorer la vitesse d'execution d'un ancien prog.
Merci
Bonjour a tous,
voila je voudrais savoir si lors de la création d'un thread dans sa méthode execute, on pouvait créee un objet.
Je fais cela afin d'améliorer la vitesse d'execution d'un ancien prog.
Merci
Salut,
on ne va pas pouvoir te répondre car on ne sait pas quelle bibliothèque tu utilises et sur quelle os tu es.
Si tu peux en profiter pour nous mettre un exemple (qui ne compile pas forcément) pour illustrer ce que tu veux faire, ça serait bien.
J'utilise la classe TThread
J'éssai de scanner un reseau et je voudrais crée un thread pour chaque Ip
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 class TMyThread : public TThread { private: AnsiString Val; protected: void __fastcall Execute(); void __fastcall Affichage(); public: __fastcall TMyThread(AnsiString); };
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 AnsiString DebIp = "192.168.2." ; for(int i = 1; i<=255; i++) { AnsiString Ipbis = DebIp + i; myThread = new TMyThread(Ipbis); } Form1->Memo1->Lines->Add("fin");
Je ne vois pas toujours pas le problème. Je ne connais pas AnsiString et les directives __fastcall donc mon jugement sera peut être compromis.
Néanmoins je ne vois pas qu'est-ce qui t'empêche de créer un objet dans la méthode Execute ?
De plus, si on regarde ta boucle :
Il y a de grosses fuites mémoire ... Création de 255 threads mais libération (supposée) que du dernier... En plus je ne sais pas comment tu vas lancer ta méthode execute sur chacun des threads après. Tu peux toujours faire quelque chose comme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 for(int i = 1; i<=255; i++) { AnsiString Ipbis = DebIp + i; myThread = new TMyThread(Ipbis); }
Ou alors stocker les threads dans un tableau si tu en as encore besoin plus tard.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 for(int i = 1; i<=255; i++) { TMyThread(DebIp + i).execute(); }
Finalement, il n'est pas d'usage (ni en C++, ni ailleurs à ce que je sache) de mettre une majuscule au nom de méthode
HTH
Tu dis que je peux stocker les Threads dans un tableau ? Cela m'interresse car effectivement j'aurais besoin de les réutiliser plus tards.
Cela ce comporte comme un tableau de chaine caractère ?
Comment cela passe t-il au niveau de l'execution? Si je lance une méthode sur un thread de mon tableau, peut t-il l'executer sur tout les thread en meme temps, ou doit -il les reprendre un a un ?
Hmmm, je te conseille de prendre un livre sur le C++ parce que je ne sais pas comment tu vas t'en sortir pour faire des choses assez compliquées (manipuler des threads n'est pas trivial) en ayant si peu de connaissances...
Sinon tu peux faire :
Tu dois les parcourir un par un pour lancer la méthode sur chacun d'eux, après il existe d'autre technique qu'une boucle for, peut-être plus élégante, mais je pense que tu peux t'en passer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 std::vector<TMyThread> threadPool; for(int i=1; i <= 255; ++i) threadPool.push_back(TMyThread(DebIp + i));
Partager