[Resolu] [C++ / thread / windows] Demarrer une methode en Thread ?

Demarrer une methode en Thread ? [Resolu] [C++ / thread / windows] - C++ - Programmation

Marsh Posté le 25-08-2003 à 15:18:35    

J'ai juste besoin d'un petit coup de pouce tout simple...
 
Comment je doit m'y prendre pour lancer cette methode dans un thread ?
 

Code :
  1. int TFTPForm::SendVidageByFtp(AnsiString nomFic)


 
SendVidageByFtp n'est pas une boucle, il s'agit d'un traitement qui dure quelque seconde et se termine. D'apres ce que j'ai compris il faut que j'utilise un thread en mode detaché ( j'ai pas besoin d'attendre la fin du traitement ds le processus principal)
 
ca fait un moment que je cherche et j'y capte rien, y a trop de pointeur sur **void avec des cast a la c.. et heu... c trop compliqué pour ma ptit tete (d'ailleur elle a mal maintenant ma tete)  :pt1cable:  
 
En gros ce que je veut faire c'est :

Code :
  1. int toto::unemethode(int i)
  2. {
  3. ...
  4. AnsiString nomFic = "coucou.txt"
  5. ...
  6. ThreadStart_ou_qq_chose_du_style(FTP->SendVidageByFTP,nomFic)
  7. ...
  8. }


 
PS : Je suis avec Builder C++, sous windows
 
Si vous avez un bout d'exemple ou un morceau de vieu code ca m'interresse aussi :)


Message édité par Phod le 26-08-2003 à 14:47:29

---------------
Signatures aux choix Votez:  O - Le python c'est bon, mangez-en  O - L'abus de forum rend dependant, postez avec modération
Reply

Marsh Posté le 25-08-2003 à 15:18:35   

Reply

Marsh Posté le 25-08-2003 à 16:00:40    

Tu crée une nouvelle classe héritant de TThread, tu lui passe une référence sur l'objet dont elle doit appeler la méthode, et dans le run (je suis plus sûr du nom de la méthode) tu appel ta méthode.


---------------
Le Tyran
Reply

Marsh Posté le 25-08-2003 à 16:53:12    

thx :)
la methode a surcharger c'est Execute...
 
codage en cours...
 
si ca marche j'edit avec le code a ecrire (pour que tlm en profite)
 
Edit:
bon, je croi bien que ca marche :)
 
donc, dans un .h :
 

Code :
  1. class TProcessus1 : public TThread
  2. {
  3. public:
  4.   TFTPForm* pFTPForm;
  5.   AnsiString nomFic;
  6.   __fastcall TProcessus1(bool CreateSuspended,TFTPForm* pForm,AnsiString nFic);
  7.   void __fastcall Execute();
  8. };


 
dans le .cpp :

Code :
  1. __fastcall TProcessus1::TProcessus1(bool CreateSuspended,TFTPForm* pForm,AnsiString nFic) : TThread(CreateSuspended)
  2. {
  3.   pFTPForm=pForm;
  4.   nomFic=nFic;
  5.   FreeOnTerminate=true;
  6. }
  7. //---------------------------------------------------------------------------
  8. void __fastcall TProcessus1::Execute()
  9. {
  10.   pFTPForm->SendVidageByFtp(nomFic);
  11. }


 
 
et pour demarrer le thread, il suffit de mettre cette ligne :

Code :
  1. TProcessus1(false,FTPForm,nf);


 
 
Je ne sais pas si c'est la meilleur solution mais ca a l'air de fonctionner :)  
:bounce:


Message édité par Phod le 26-08-2003 à 14:46:16

---------------
Signatures aux choix Votez:  O - Le python c'est bon, mangez-en  O - L'abus de forum rend dependant, postez avec modération
Reply

Marsh Posté le 27-08-2003 à 14:04:22    

Tumdudum
 

Code :
  1. // thread.h
  2. class Thread
  3. {
  4. protected:
  5.   virtual DWORD Procedure() = 0;
  6. private:
  7.   static DWORD CALLBACK ProcedureProxy( LPVOID p )
  8. };
  9. // thread.cpp
  10. DWORD CALLBACK Thread::ProcedureProxy( LPVOID p )
  11. {
  12.   return reinterpret_cast<Thread *>(p)->Procedure();
  13. }
  14. // test.cpp
  15. class Blah
  16. {
  17. // ...
  18.   DWORD Procedure()
  19.   {
  20.     Sleep( INFINITE ); // le thread super utile
  21.     return 0;
  22.   }
  23. };
  24. Blah lala;
  25. CreateThread( ..., Thread::Procedure, reinterpret_cast<LPVOID>(&lala) );

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed