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

SL & STL C++ Discussion :

Non affichage avec cout


Sujet :

SL & STL C++

  1. #1
    En attente de confirmation mail
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Points : 54
    Points
    54
    Par défaut Non affichage avec cout
    Bonjour à tous,

    Je fais un programme assez complexe avec threads et sockets.
    Après avoir fait appel , dans un thread, à mon socket pour télécharger un fichier qui se trouve sur un serveur, un setevent est envoyé à mon programme principal pour lui signifier que le fichier a bien été enregistré.
    Hélas, à partir de là, tous mes affichages via cout qui sont censés afficher une variable bloquent et n'affichent pas de variables...

    J'avais 2 idées pour trouver une solution mais n'ai rien résolu : la 1ere était que lors du passage à ma socket mes variable de mon programme principal était supprimé (ce qui ne semble pas être le cas) et la 2eme était un confli () avec cout, cin... Enfin, bref, des idées mais pas de solutions !

    Si quelqu'un a déjà rencontré ce problème, qu'il n'hésite pas à me venir en aide !
    Merci

  2. #2
    Membre averti Avatar de Bob.Killer
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    336
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 336
    Points : 332
    Points
    332
    Par défaut
    tu utilises pas une socket bloquante par hasard ?

  3. #3
    En attente de confirmation mail
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Points : 54
    Points
    54
    Par défaut
    Je ne pense pas utiliser de socket bloquante(euh, je ne sais pas trop ce que cela signifie). En fait, c'est lorsque la connexion est terminée, après closesocket(client); et WSACleanup();, que j'envoie mon setevent qui permet au prog principal de reprendre son chemin en parallèle au thread.
    Et c'est dans ce prog principal que je fais des cout qui ne fonctionnent pas

  4. #4
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 69
    Points : 56
    Points
    56
    Par défaut
    Es tu sur que ton setEvent est effectué ?
    Parceque si ta socket est bloquante, ton prog ne reprendra jamais son cours

  5. #5
    En attente de confirmation mail
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Points : 54
    Points
    54
    Par défaut
    Pour etre un peu plus claire je vais vous afficher un bout de code , voici le morceau de mon main qui lance le thread :
    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
     
    QueryPerformanceFrequency(&Frequency);
    int nb_max = 1 ; //Je l'ai mi a 1 pour cet exemple (->un seul thread)
    ...
    QueryPerformanceCounter(&val2);
    HANDLE hThread[nb_max];
    unsigned long ThreadId;
     
    for(i=0;i<nb_max;i++)
    	{
    		hThread [i] = CreateThread(NULL,NULL,Thread_test,(void *) &voiePID[i], NULL, &ThreadId);
    	}
     
    WaitForMultipleObjects( // Attente que les threads soient tous initialisés !
    			nb_max,		
    			hEventsThreadsInit,   
    			TRUE,				
    			INFINITE);			
     
    cout<<"\nThreads tous lanc\202s et initialis\202s (WaitForMultipleObjects) !\n";
     
    QueryPerformanceCounter(&val3);
    cout <<"# Initialisations des threads en " << (double)(val3.QuadPart-val2.QuadPart)*1000/(double)Frequency.QuadPart<< " millisecondes." << endl;
    Dans ma console s'affiche alors "Initialisations des threads en " (waitformultipleobject bien passé et le chargement du fichier via socket aussi) et rien ne s'affiche après alors que quand je fais cela en pas à pas, je vois dans mon VS 2003 que "(double)(val3.QuadPart-val2.QuadPart)*1000/(double)Frequency.QuadPart" a bien une valeur en décimal !

    Le programme continue ensuite de se dérouler.

    NB : J'ai fait une autre version de cce prog qui fonctionne très bien avec chargement de fichier dans le thread à partir de fichier de mon ordi local (donc sans socket et cela fonctionne tres bien)

  6. #6
    En attente de confirmation mail
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Points : 54
    Points
    54
    Par défaut
    En fait, cet affichage qui ne fonctionne pas n'empêche pas le programme de tourner mais empêche tous les affichage qui suivent de s'afficher dans mon programme

Discussions similaires

  1. Problème d'affichage avec "cout"
    Par narcibrook dans le forum Débuter
    Réponses: 5
    Dernier message: 25/03/2013, 00h09
  2. determiner le nombre de cases d'affichage avec cout
    Par prince_bouja dans le forum Débuter
    Réponses: 3
    Dernier message: 30/10/2010, 11h19
  3. affichage à l'ecran non conforme avec le code
    Par abira dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 24/03/2009, 10h53
  4. aucun affichage avec le cout mais pas d'erreur
    Par skerdreux dans le forum C++
    Réponses: 2
    Dernier message: 15/04/2008, 15h38
  5. Affichage de l'adresse d'une chaine avec cout
    Par thierryguilbert dans le forum SL & STL
    Réponses: 4
    Dernier message: 14/03/2005, 17h04

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