IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Cr�er des Thread pour le composant TClientSocket


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    11
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 11
    Par d�faut Cr�er des Thread pour le composant TClientSocket
    Bonjour � tous

    Je cherche un exemple pour utiliser un composant ClientSocket en mode bloquant avec un thread "TClientSocketThread".
    Je ne comprend pas a fa�on de cr�er le thread et la mani�re d'utiliser les bon arguments

    Merci d'avance

    Mastok

  2. #2
    Expert confirm�

    Avatar de pottiez
    Homme Profil pro
    D�veloppeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : D�veloppeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par d�faut
    Salut,
    le but des composants TClientSocket et TServerSocket, est que justement, tu n'as pas � g�rer les threads, il le fait lui m�me.

    Je te conseille ces trois discutions sur les composants socket :

  3. #3
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Responsable de compte
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par d�faut
    Bonjour
    L'utilisation de la classe TServerSocket en mode synchrone(bloquant) n�cessite
    une classe descendante de TServerClientThread

    par ex:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    class TMyServerThread : public TServerClientThread
    {
       public:
          // if true, FreeOnTerminate is set to false before the thread terminates,
          // and the thread is left in the thread cache. When KeepInCache is false,
          // the thread is freed when execution terminates.
          __fastcall TMyServerThread(bool CreateSuspended, TServerClientWinSocket* ASocket)
             : Scktcomp::TServerClientThread(CreateSuspended, ASocket)
             {
     
               CreateSuspended = false;
               FreeOnTerminate=false;
             };
          void __fastcall ClientExecute(void);
    private:
           // tes membres privés
    };
    tu impl�mente ton code dans le fichier .cpp de m�me nom

    tu cr�e une instance de ta classe de traitement dans la m�thode OnGet Thread

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    void __fastcall TForm1::ServerSocket1GetThread(TObject *Sender,
          TServerClientWinSocket *ClientSocket,
          TServerClientThread *&SocketThread)
    {
         SocketThread = new TMyServerThread(false, ClientSocket);
    }
    ton composant TServerSocket cr�era ainsi pour chaque socket client une instance de ta classe TMyServerThread .

    Un point important le composant TServerSocket g�re une cache des threads
    il peut �tre n�cessaire de contr�ler par exemple dans le constructeur de ta classe si le nombre de threads cr�es est plus petit que la taille du cache (par d�faut 10) de garder le thread en m�moire

    cordialement
    vous trouverez mes tutoriels � l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les r�gles du forum

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    11
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 11
    Par d�faut
    Ok pour le serveur mais pour le Client j'aurais voulu cr�er un thread bloquant �galement.

  5. #5
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Responsable de compte
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par d�faut
    tu Cr�e une classe descendant de TThread en passant dans le constructeur de cette classe le Port de connexion et un MemoryStream initialis� avec les donn�es que tu veux transmettre au serveur
    dans la m�thode Execute de ta class Thread tu cr�e une instance de la classe TClientThread, tu initialise cette classe avec l'adresse du serveur, le mode de travail bloquant ,tu active l'instance de TclientThread, tu cr�e une boucle d'attente de type
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     while (!Terminated && FSocket->Connected)
           {
            if(FStream->WaitForData(60000))
             {
                //ton code de traitement
     
             }
            }
     // tu déconnecte le socket
    dans l'aide de c++ Builder tu trouveras l'exemple suivant

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    void __fastcall TMyClientThread::Execute()
    {
      // crée un TWinSocketStream pour la lecture et l'écriture
      TWinSocketStream *pStream = new TWinSocketStream(ClientSocket1->Socket, 60000);
      try
      {
        // récupère et traite les commandes jusqu'à ce que la connexion ou le thread soit terminé
        while (!Terminated && ClientSocket1->Active)
        {
          try
          {
            char buffer[10];
            GetNextRequest(buffer); // GetNextRequest doit être une méthode protégeant le thread
     
            // écrit la demande au serveur 
            pStream->Write(buffer, strlen(buffer) + 1);
            // continue la communication (par exemple, lit une réponse du serveur)
            ...
          }
          catch (Exception &E)
          {
            if (!E.ClassNameIs("EAbort"))
              Synchronize(HandleThreadException()); // vous devez écrire HandleThreadException
          }
        }
      }
      __finally
      {
        delete pStream;
      }
    }
    cordialement
    vous trouverez mes tutoriels � l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les r�gles du forum

Discussions similaires

  1. WinDev 9 : Cr�er des sons pour un piano
    Par jbidou88 dans le forum WinDev
    R�ponses: 1
    Dernier message: 20/08/2007, 14h48
  2. R�ponses: 2
    Dernier message: 09/02/2007, 18h47
  3. Cr�er des bordures pour un JLabel
    Par theniaky dans le forum AWT/Swing
    R�ponses: 2
    Dernier message: 06/05/2006, 19h18
  4. R�ponses: 2
    Dernier message: 04/08/2005, 19h00
  5. R�ponses: 3
    Dernier message: 11/02/2004, 12h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo