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

Multithreading Discussion :

Threads Qt [QThread]


Sujet :

Multithreading

  1. #1
    Membre confirmé Avatar de Tom487
    Homme Profil pro
    Étudiant informatique
    Inscrit en
    Avril 2011
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 111
    Par défaut Threads Qt
    Bonjour à tous,

    Je développe actuellement une application client/serveur avec QT.
    J'ai déporté la réception et l'envoi de trames dans des threads créées par mon application (qu'elle soit le client ou le serveur ne change rien).

    Mon problème vient du faite que j'aimerais créer ma QUdpSocket * dans mon application, puis que mon thread l'utilise afin d'envoyer ou de recevoir des paquets. Pour ensuite mourir et être remplacé par un autre thread qui utilisera cette même socket et ainsi de suite (le but est ici de garder la socket d'une fois sur l'autre afin de ne pas créer une nouvelle socket à chaque threads).
    Lorsque je fais cela, j'ai une erreur qui me dit que je ne peux pas créer un fils dans un certain thread pour l'utiliser ensuite dans un autre thread.
    Je précise que mon application hérite de QObject.

    De plus la fonction moveToThread() ne résoudrait pas mon problème car je veux que ma socket reste dans mon application afin de la garder d'un thread sur l'autre.

    Si vous avez déjà eu ce problème ou que je fais une erreur de conception merci de m'aider.

    J'espère avoir été clair, si vous avez des question n'hésitez pas, sinon merci d'avoir lu ce message.

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Salut.
    Regarde bien la doc de movetothread, tu devrais trouver ton problème
    Sinon, as tu regardé :
    http://qt.developpez.com/doc/latest/...fortuneserver/

  3. #3
    Membre confirmé Avatar de Tom487
    Homme Profil pro
    Étudiant informatique
    Inscrit en
    Avril 2011
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 111
    Par défaut
    Bonjour, merci de ton aide premièrement!

    Ensuite, je viens de passer une partie de la matinée à regarder le movetothread, plus particulièrement avec ces deux liens :
    http://qt-labs.developpez.com/thread...-movetothread/
    http://qt-labs.developpez.com/thread...ans-maux-tete/

    J'ai testé cette solution : http://qt-labs.developpez.com/thread...ans-maux-tete/

    Malheureusement mon problème n'est toujours pas résolu, je vais regarder plus en détail ton lien car même si c'est en TCP alors que je fais de l'UDP ça à l'air d'être proche de ce que je fais.

    L'erreur exacte est : "QObject : Cannot create children for a parent that is in a different thread"
    Je me demande si c'était pas tout simplement impossible ce que je veux faire ^^, ce qui m'étonnerais grandement.

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Tom487 Voir le message
    L'erreur exacte est : "QObject : Cannot create children for a parent that is in a different thread"
    Quand tu créé un objet, tu lui passe un parent qui appartien à un autre thread. D'où l'erreur.

    Si tu fait des moveTothread, pourquoi as tu besoin de lui donner un parent?

    Peux tu mettre un peux de code? J'ai un doute, il me semble que cette erreur apparaît quand on fait un moveTothread sur une socket Qt. Du coup, regarde l'exemple qui montre l'utilisation des socket en multithread. Ca devrais correspondre à ton cas. En gros, tu utilise l'id de la socket au lieu de transferer une socket Qt.

    http://qt.developpez.com/doc/latest/...cketdescriptor
    http://qt.developpez.com/doc/latest/...cketdescriptor

  5. #5
    Membre confirmé Avatar de Tom487
    Homme Profil pro
    Étudiant informatique
    Inscrit en
    Avril 2011
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 111
    Par défaut
    En faite, ce que je voulais faire au début, c'est créer un thread en lui passant mon client en paramètre afin que ce thread puisse utiliser la QUdpSOcket.

    Pour les movetothread, je n'en ai dans mon code que depuis ce matin, je ne comprend pas encore bien l'utilité, pour l'instant j'essaye juste de trouver le méthode qui marche pour ensuite mieux la comprendre.

    Comme il l'a expliqué dans le tuto, je ne fais pas de movetothread sur la socket mais sur le thread, comme ça :
    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
     
    //Soit je fais comme ça, soit je ne passe rien en paramètre et j'utilise le setClient() afin
    // que mon thread connaisse le client et utilise la socket du client.
        threadClient = new ThreadSend(this->getC()); // getC est la socket UDP
     
        threadClient->moveToThread(&thread);
     
        threadClient->setClient(this);
        threadClient->setFrame(frame);
     
        threadClient->connect(&thread, SIGNAL(started()), threadClient , SLOT(send()));
     
        thread.connect(threadClient, SIGNAL(finished()), &thread ,SLOT(quit()));
     
        // If thread cannot send data or connect with server
        connect(threadClient, SIGNAL(fail(QString)), tb_chat, SLOT(append(QString)));
     
        thread.start();
    Pour tn idée sur le fait d'utiliser l'id au lieu de la socket, je sais pas, normalement vu que j'utilise le pointeur de socket de mon client ça devrais marcher na ?
    SI t'as besoin de plus de code ?

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Tom487 Voir le message
    En faite, ce que je voulais faire au début, c'est créer un thread en lui passant mon client en paramètre afin que ce thread puisse utiliser la QUdpSOcket.
    J'ai bien compris. C'est object sont une interface à une socket système qui exploite l'eventloop pour son fonctionnement.

    Pour les movetothread, je n'en ai dans mon code que depuis ce matin, je ne comprend pas encore bien l'utilité
    A associe le fonctionnement d'un QObject à une autre eventloop.

    Comme il l'a expliqué dans le tuto, je ne fais pas de movetothread sur la socket mais sur le thread, comme ça :
    Pourquoi sur le thread??



    Pour tn idée sur le fait d'utiliser l'id au lieu de la socket, je sais pas, normalement vu que j'utilise le pointeur de socket de mon client ça devrais marcher na ?
    C'est ce que montre l'exemple de Qt. Après, je ne sais plus s'il y as un problème à changer de thread un QxxxSocket. Mais vue ce que j'ai compris, il faut mieux utiliser cela.

  7. #7
    Membre confirmé Avatar de Tom487
    Homme Profil pro
    Étudiant informatique
    Inscrit en
    Avril 2011
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 111
    Par défaut
    Citation Envoyé par yan Voir le message
    Pourquoi sur le thread??
    Dans le tuto, il fait ça afin qu'une classe banal qui hérite de QObject puisse être lancé par le thread.
    Mais son but est de refaire le problème des lecteurs écrivains sans mutex ni sémaphore ni rien d'autre que les threads. Je pense que grâce à sa méthode les threads ne font pas d'accès concurrent, mais je n'en suis pas certain.

    En faisant un test avec Wireshark tout a l'heure j'ai pu me rendre compte que mes paquets malgré "l'erreur" que j'ai sont quand même envoyé, je ne comprend pas pourquoi.
    SI tu as des choses plus importante à faire, fais les, je vais continuer d'essayer de ne plus avoir cette erreur, mais bon faut pas que je prenne trop de retards donc je vais pas passer trop de temps à chercher.

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Tom487 Voir le message
    Dans le tuto, il fait ça afin qu'une classe banal qui hérite de QObject puisse être lancé par le thread.
    Plus exactement c'est pour que ses slot et son fonctionnement intern(dépend du QObject) s'éxécute dans l'eventloop du thread.
    Donc c'est au QUdpSocket qu'il faudrait le faire.

    As tu regardé un peu la FAQ ?
    http://qt.developpez.com/faq/?page=Thread

    Sinon, peux tu expliquer plus précisément ce que tu doit faire?

  9. #9
    Membre confirmé Avatar de Tom487
    Homme Profil pro
    Étudiant informatique
    Inscrit en
    Avril 2011
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 111
    Par défaut
    Oui j'y avais regardé.
    Il est possible de transférer l'appartenance d'un QObject entre QThread grâce à la méthode moveToThread(). Attention à ces quelques règles !

    * Seul le thread associé au QThread du QObject doit utiliser cette fonction ;
    * Le QObject ne doit pas avoir de parent ;
    * Tous les enfants du QObject sont aussi transférés. Il est donc important que les QObject membres d'une classe dérivée de QObject ait pour parent this (sauf les QWidget).
    * Une fois transféré, le QObject ne doit plus être utilisé par l'ancien thread.
    C'est pourquoi je n'avais pas retenus cette solution, car si mon client ne peut utiliser sa socket, les autres threads après non plus je pense.

    Et ce que je dois faire est tout bête, une architecture client serveur en UDP avec QT car ça doit être multiplatformes.
    Je vais essayer de faire le movetothread sur ma socket afin de voir le resultat, mais je ne suis pas convaincu ^^ même si tu as sans doute raison.

    Edit : Merci pour l'explication exacte de l'utilité de movetothread.

  10. #10
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Tu veux que plusieurs thread utilise ta socket en même temps????

  11. #11
    Membre confirmé Avatar de Tom487
    Homme Profil pro
    Étudiant informatique
    Inscrit en
    Avril 2011
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 111
    Par défaut
    Non non ^^, je veux avoir un client qui a un socket pour envoyer des trams, et que mon client lorsqu'il doit envoyer une trame créer un thread en lui donnant son socket afin qu'il puisse envoyer la tram en parallèle a l'application principal qui est mon client.
    Une fois ma trame envoyé, le thread meurt et le client peut recréer un autre thread qui utilisera la même socket que le premier afin d'envoyer ses trames.
    J'aimerais faire comme ça car je trouve ça sale de devoir recréer une socket à chaque fois que je créer un nouveau thread.

  12. #12
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Les socket Qt ont un fonctionnement asynchrone grace à l'eventloop et ne sont pas bloquante. Tu n'as donc pas besoin de faire un thread pour cela

  13. #13
    Membre confirmé Avatar de Tom487
    Homme Profil pro
    Étudiant informatique
    Inscrit en
    Avril 2011
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 111
    Par défaut
    Je n'y avais pas réfléchis ^^.
    Mais j'ai quand même besoin d'un thread car j'ai un bout de code qui gère un acquittement simple afin d'être (presque) sûr que les paquets arrivent bien à destination, si je ne déporte pas mon traitement dans un thread ça va bloquer mon application le temps que l'acquitement soir reçus, ce qui n'est pas ce que je veux.

  14. #14
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Tom487 Voir le message
    Mais j'ai quand même besoin d'un thread car j'ai un bout de code qui gère un acquittement simple afin d'être (presque) sûr que les paquets arrivent bien à destination
    Il fait comment?

  15. #15
    Membre confirmé Avatar de Tom487
    Homme Profil pro
    Étudiant informatique
    Inscrit en
    Avril 2011
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 111
    Par défaut
    Comme ça, regarde juste un des trois, c'est la même chose mais le premier est pour la "connexion", le second les paquets d'acquittements et le dernier pour tous les autres paquets. (Le code n'est pas encore terminé, si tu vois des choses à changer, hésite pas)
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
    void ThreadSend::send()
    {
     
        sockSend->writeDatagram( frame->getPaquet(), client->getIp(), client->getPort()+1);
     
        //It is connection frame
        if (client->getconnectionEstablished() == false)
        {
            int attempt = 0;
            //Ensuite on attend le paquet d'acquitement qui va spécifier
            //que la connexion s'est bien passé
            while (client->getconnectionEstablished() == false)
            {
                //faire un if qui attend un temps donnée afin de renvoyer
                //le paquet de connexion si il n'a pas été reçus
     
                //Wait 250 milisecondes
                QTest::qWait(250);
     
                if (client->getconnectionEstablished() == false)
                {
                    sockSend->writeDatagram( frame->getPaquet(), client->getIp(), client->getPort()+1);
                }
     
                //After ten attempt connection is not possible so error
                if (attempt == 10)
                {
                    emit fail("Connexion failed");
                    emit finished();
                    break;
                }
                attempt++;
            }
        }
        else
        {
            // It is a acquittal frame
            if (frame->getTypeFrame() == 0)
            {
                int attempt = 0;
                //Ensuite on attend le paquet d'acquitement qui va spécifier
                //que la connexion s'est bien passé
                while (client->getAcquittal(frame->getNbFRame()) == false)
                {
     
                    //Wait 250 milisecondes, before resend frame
                    QTest::qWait(250);
     
                    if (client->getAcquittal(frame->getNbFRame()) == false)
                    {
                        sockSend->writeDatagram( frame->getPaquet(), client->getIp(), client->getPort()+1);
                    }
     
                    //After ten attempt connection is not possible so error
                    if (attempt == 10)
                    {
                        // Warning can bug because qint are not a Qstring
                        //emit fail("Send frame n° : " + nbFrame + " failed, number of commande : ");
                        emit fail("Probleme d'envoie d'acquitement");
                        emit finished();
                        break;
                    }
                    attempt++;
                }
            }
            else // It is other frame
            {
                int attempt = 0;
                //Ensuite on attend le paquet d'acquitement qui va spécifier
                //que la connexion s'est bien passé
                while (client->getFrameAck(frame->getNbFRame()) == false)
                {
     
                    //Wait 250 milisecondes, before resend frame
                    QTest::qWait(250);
     
                    if (client->getFrameAck(frame->getNbFRame()) == false)
                    {
                        sockSend->writeDatagram( frame->getPaquet(), client->getIp(), client->getPort()+1);
                    }
     
                    //After ten attempt connection is not possible so error
                    if (attempt == 10)
                    {
                        // Warning can bug because qint are not a Qstring
                        //emit fail("Send frame n° : " + nbFrame + " failed, number of commande : ");
                        emit fail("Probleme de frame");
                        emit finished();
                        break;
                    }
                    attempt++;
                }
            }
     
        }
    }

  16. #16
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Pourquoi tu n'utilise pas les signaux des socket pour cela?

  17. #17
    Membre confirmé Avatar de Tom487
    Homme Profil pro
    Étudiant informatique
    Inscrit en
    Avril 2011
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 111
    Par défaut
    Par ce que j'ai mal lu la doc...
    Mais que changerais tu dans ce code ?
    Je ne trouve pas ma méthode moins bien qu'une autre méthode avec signaux personnellement.

  18. #18
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Tom487 Voir le message
    Par ce que j'ai mal lu la doc...
    Mais que changerais tu dans ce code ?
    Perso, je n'aurais pas fait de thread et j'aurais utilisé une state machine.

    Vue que tu ne lance pas d'eventloop dans ton thread, comment fait tu pour lui faire envoyer/récupérer les données?

    Pour que ton QUdpSocket fonctionnement dans un thread, il faut qu'il lui soit associé. Soit tu fait un moveToTHread soit tu utilise son id.
    Si tu utilise moveToTHread, il ne faut pas oublier de le retransmettre au thread principale à la fin du thread (c'est pour cela que j'avais dit de regarder la doc, seule le thread associé à un QObject peux appeler cette fonction dessus).

    Si ta socket est déjà connecté, je ne suis pas sur que tu peux utiliser moveToThread.

  19. #19
    Membre confirmé Avatar de Tom487
    Homme Profil pro
    Étudiant informatique
    Inscrit en
    Avril 2011
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 111
    Par défaut
    Citation Envoyé par yan Voir le message
    Perso, je n'aurais pas fait de thread et j'aurais utilisé une state machine.
    Je ne sais pas ce que c'est une state machine, je vais aller voir ça de ce pas.

    Citation Envoyé par yan Voir le message
    Vue que tu ne lance pas d'eventloop dans ton thread, comment fait tu pour lui faire envoyer/récupérer les données?.
    J'utilise mon pointeur de client qui a des getters et setters sur ses données.

  20. #20
    Membre confirmé Avatar de Tom487
    Homme Profil pro
    Étudiant informatique
    Inscrit en
    Avril 2011
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 111
    Par défaut
    Bon j'ai résolu mon problème, et j'ai bien suivis toutes les recommandations que j'ai pu lire sur ce forum .
    Surtout les deux articles traduit de Bradley T. Hughes.

    Ma solution a été d'utiliser l'id comme tu me l'avais conseillé.
    Pour expliquer, je recréer ma socket dans ma méthode (qui est dans le thread) avec l'id de la socket de mon client.
    Merci de ton aide, et bonne journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  2. récupérer la valeur de sortie d'un thread
    Par jakouz dans le forum Langage
    Réponses: 3
    Dernier message: 31/07/2002, 11h28
  3. Programmer des threads
    Par haypo dans le forum C
    Réponses: 6
    Dernier message: 02/07/2002, 13h53
  4. Réponses: 5
    Dernier message: 12/06/2002, 15h12
  5. [Kylix] Pb de Thread !!
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 25/04/2002, 13h53

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