2013-05-13 1 views
0

Je souhaite envoyer un fichier de 1 Mo à 200 Ko/seconde (transfert de 5 secondes) à l'aide d'un QTcpSocket. La fonction de logement ReadyRead lit d'abord la taille du fichier (en-tête), puis démarre un thread qui bloque lors de la lecture des octets file_size du socket. Mais, puisque la fonction de logement readyRead se termine avant le transfert de fichiers, n'y aura-t-il pas de nouveaux appels pour la fonction readyRead (de nouveaux ReadyReads émis) qui pourraient interférer?QTcpSocket: plusieurs ReadyReads lors de l'envoi de gros fichiers

Je lis ici: How to make sure that readyRead() signals from QTcpSocket can't be missed? que pendant que vous êtes dans la fonction slot, aucun nouveau ReadyReads ne sera émis.

Répondre

0

Une solution évidente à mon propre problème serait de déconnecter() le signal readyread() de la fonction de slot à l'intérieur de la fonction slot, si c'est possible.

0

Vous n'avez pas besoin de démarrer un thread séparé. Il suffit de gérer tous les signaux readyRead() et d'ajouter de nouvelles données au fichier. Finalement, tout le fichier sera reçu.

Vous n'avez pas besoin d'obtenir le transfert entier en une seule fois, il suffit d'écrire le fichier un morceau à la fois.

Questions connexes