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 :

QThread et QFtp


Sujet :

Multithreading

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 49
    Par défaut QThread et QFtp
    Salut,

    Je doit réaliser un projet en c/c++, j'utilise qdevelop et donc la bibliothèque qt (la dernière version).

    J'ai mis en place un serveur (QTcpServer) qui attend un message d'un client web.
    Quand je reçois le message je créer une thread pour gérer les multi-connexions.
    Dans ce thread je créer un client TCP qui doit réaliser plusieurs tâche:
    - ce connecter sur le serveur TCP d'un IPC@chip pour commander une bande convoyeuse.
    - ce connecter à une caméra IP et envoyer une requête pour récupérer une image.
    - enregistrer l'image sur mon pc grace à un QFile
    - plein d'autre truc ...
    - enregistrer l'image sur un serveur ftp distant

    Mon problème est dans le client ftp.
    Je créer mon client ftp grâce à QFtp.
    Je fais un connectToHost(adresse,port).
    Je fait un login(login,mdp).
    Un cd(repertoire) pour me déplacer dans le répertoire voulu.
    Et enfin un put(file,"nom sur serveur ftp") pour uploader l'image.

    Je n'est aucune erreur mais après avoir lancer mon programme je vérifie sur le serveur ftp via une console mais il n'y à aucun fichier.

    J'ai créer des tests avec QFtp::state() pour savoir ce qu'il faisait. Il arrive bien à ce connecter mais il n'arrive pas à ce logger.

    Sur le serveur il y à aussi une base de données et j'arrive bien à me connecter/logger et enregistrer des données dans la base.

    J'ai ensuite essayé de créer un nouveau projet ou je ne fait que la partir ftp dedans.
    Je créer le client le connectToHost le login etc ...
    Et cette fois si sa marche très bien, quand je vérifie sur le serveur ftp je retrouve bien mon image.

    Voila es-ce que le problème peu provenir du fait que je créer mon client ftp dans une thread?

  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
    Citation Envoyé par Tibzz Voir le message
    Voila es-ce que le problème peu provenir du fait que je créer mon client ftp dans une thread?
    non, je ne pense pas.
    As tu l'eventloop de lancé dans la thread (je pense que oui)
    Ou as tu créé QFtp utilisé par le thread?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 49
    Par défaut
    Salut,

    Enfait mon programme est un peu plus compliqué que ca j'ai expliqué qu'une partie.
    Ma classe MyThread fait plusieurs choses : recherche les adresses ip des caméras et des IPC@chip, elle lit le message envoyé par le client qui c'est connecté sur mon serveur et elle créer un objet de la classe client.

    Dans ma classe client je récupère la photo et je l'enregistre sur mon pc. C'est juste après l'avoir enregistré sur mon pc que je créer l'objet ftp.

    J'ai lu dans la doc que les fonctions de la classe QFtp n'étaient pas bloquantes "The class works asynchronously, so there are no blocking functions." donc je me demande si c'est pas acose de ça.

    Un peu comme les read() et write() ou il faut utiliser des signaux genre readyread() pour que ça marche bien.

    L'event loop c'est le run?
    Si c'est ça oui j'ai bien redéfini la fonction run().

  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
    Pour commencer, regarde les première QR de la FAQ sur les THREAD
    http://qt.developpez.com/faq/?page=Thread
    Il y as un bon début d'explication.
    Un objet asynchrone à besoin d'avoir une event loop.
    Pour lancer l'eventloop d'une thread il faut appeler exec() dans le run.
    Regarde aussi les exemples de Qt sur les thread.

    N'hésite pas si tu as besoin de précision

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 49
    Par défaut
    ah effectivement ça me dit rien.
    Je vais lire la doc pour en apprendre un peu plus sur l'event loop dans la soirée ou le week-end.
    Merci pour ton aide

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 49
    Par défaut
    Pour les exemples de qt sur les threads on peu les trouver ou?
    Parce que dans dans l'aide Qt (F1 quand je suis dans qdevelop) ya pas grand chose comme exemples.

    Edit: j'ai trouver un truc sur le site de qt

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 49
    Par défaut
    Salut,

    J'ai essayé de mettre l'event loop comme tu me l'avais dit.
    J'ai juste mis exec(); dans mon run mais ça ne change rien.

    edit: es-ce que ça peu provenir du fait que dans ma classe client il n'y a pas Q_OBJECT et #include <QObject>?

    edit2: je suis finalement passé par des signaux et j'ai créé ma connexion au serveur FTP en dehors de ma thread vu que chaque client utilise les mêmes identifiants.

    Merci pour ton aide même si je n'est pas réussi à faire fonctionner l'event loop j'ai trouvé un autre moyen.
    A+

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

Discussions similaires

  1. [QThread] QProcess et QSemaphore
    Par slymira dans le forum Multithreading
    Réponses: 11
    Dernier message: 29/11/2007, 11h40
  2. [QThread] QThread qui fait figger le programme
    Par alpha_one_x86 dans le forum Multithreading
    Réponses: 1
    Dernier message: 29/11/2007, 10h16
  3. [QThread] ne marche pas
    Par alpha_one_x86 dans le forum Multithreading
    Réponses: 11
    Dernier message: 23/11/2007, 09h13
  4. [Thread] QThread et QSocket
    Par G3G3 dans le forum Multithreading
    Réponses: 7
    Dernier message: 30/10/2007, 20h25

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