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

Windows Discussion :

[c++]Actualisation d'un Thread


Sujet :

Windows

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 124
    Par défaut [c++]Actualisation d'un Thread
    Bonjour,
    j'utilise un Thread avec une while(1) pour mettre a jour des variable (d'un socket) sa marche, mais le Thread ne fonctionne pas seul, les donnees s'actualise que lorsque que je bouge la souris sur mon programme.
    Je comprend pas pourquoi
    voila mon 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    DWORD WINAPI ThreadProc(LPVOID lpParam);
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                                                    LPSTR lpCmdLine, int nCmdShow)
    {
        DWORD ThreadId;
    	CreateThread(NULL,NULL,ThreadProc,NULL,NULL,&ThreadId);
    
    ......etc
    while( GetMessage( &msg, 0, 0, 0 ) )
    	{
    		TranslateMessage( &msg );
    		DispatchMessage( &msg ); 
        SetDlgItemText(hDlg, 101,info);
    }
    ....
    }
    
    DWORD WINAPI ThreadProc(LPVOID lpParam)
    {  HWND                hDlg;
            WSADATA WSAData;
    		WSAStartup(MAKEWORD(2,0), &WSAData);
    	
    		SOCKET sock;
    		SOCKADDR_IN sin;
    		char *bufferRecv = new char[800];
            char *bufferSend = new char[800];
    
    		sock = socket(AF_INET, SOCK_STREAM, 0);	
    	while(1)
    	{
    ......
     info=bufferRecv;  // les donnees de bufferRecv seron envoyer a SetDlgItemText du while des messages
        ......
    }
    	return 0;
    }
    Merci pour votre aide

  2. #2
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Salut.

    Je pense que c'est un problème de rafraîchissement. Lorsque tu bouges ta souris sur la fenêtre, le message WM_PAINT est envoyé à ta boucle de message et les données sont réactualisées.

    Lorsque tu modifies le contenu de ta dialogue avec SetDlgItemText, fais un UpdateWindow(...) ou un SendMessage avec comme paramètre WM_PAINT.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 124
    Par défaut
    Merci !!!
    Oui c'est ça j'ai tester ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while(GetMessage( &msg, 0, 0, 0 ))
    	{  
            MessageBox(hDlg,"hh","ggg",NULL);
    		TranslateMessage( &msg );
    		DispatchMessage( &msg );
            SetDlgItemText(hDlg, 101,info);
           
    }
    et bien la message box s'affiche que lorsque que je passe la souris sur la fenetre !
    Je met upadatewindow ou ?
    Le plus simple je pense serais que je mette le SetDlgItemText dans le thread mais hwnd/hdlg existe pas, si je met : static HWND hDlg; le texte n'est pas afficher
    donc je voudrais savoir comment ont met le HWND dans le thread, ou faire comme tu as dit (mais avec SendMessage.. il faut hwnd ??)
    merci !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 124
    Par défaut
    C'est bon merci !
    J'ai mis un timer dans le BOOL APIENTRY qui actualise la fenetre et ça marche
    Merci de ton aide qui m'a beaucoup aider !

  5. #5
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Citation Envoyé par Guillaume602
    Je met upadatewindow ou ?
    Le plus simple je pense serais que je mette le SetDlgItemText dans le thread mais hwnd/hdlg existe pas, si je met : static HWND hDlg; le texte n'est pas afficher
    donc je voudrais savoir comment ont met le HWND dans le thread, ou faire comme tu as dit (mais avec SendMessage.. il faut hwnd ??)
    merci !
    Tu peux éventuellement déclarer ta variable comme globale, ou la passer comme paramètre à ton thread. Ceci évitera l'utilisation d'un timer.

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/10/2008, 16h14
  2. Thread et actualisation de l'affichage swing
    Par Pirokkk dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 28/12/2007, 19h41
  3. Actualisation périodique : timer ou thread ?
    Par Shredder dans le forum Langage
    Réponses: 12
    Dernier message: 02/11/2007, 08h52
  4. arrêter/actualiser un thread
    Par hicham10 dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 21/07/2007, 16h47
  5. Réponses: 1
    Dernier message: 07/05/2007, 10h13

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