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

MFC Discussion :

PumpMessages() et bouton!!


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 21
    Par défaut PumpMessages() et bouton!!
    Bonjour,

    Dans mon programme j'ai un traitement a faire et je dois attendre qu'une valeur passe a TRUE pour que le reste du programme s'éxécute. Pour cela j'ai fait une boucle while.

    Mais le problème c'est que pour faire passé cette valeur à TRUE je dois appuyé sur un bouton. Mais tout est figé, j'ai bien essayé une pumpmessages dans ma boucle, tout s'affiche mais la fenetre ne peut être déplacé et el bouton appuyé!!!

    Ya t'il une autre façon de codé une attente de changement de variable???

    Merci de vos réponses

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut ,
    montre comment tu as codé ça .
    sinon une solution placer ton traitement dans un thread .

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 21
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //Vérifie que transition effectué pour changé de fiche
     
    	while(statutench==false)
    	{
    		PumpMessages();//Non bloquant
    	}  
    	recset.MoveNext();
    	statutench=false;
    recset.MoveNext() fait parti d'une fonction ODBC! Le code est déja dans un while(!recset.IsEOF()) donc c'est difficile de faire tout ça dans un thread!

    le changement de statut ce fait avec la fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void CExecution::OnBnClickedButton1()
    {
    	if(EnchValidation!="-1.0"&&statutench==false)
     {
    	MessageBox("val");
    	statutench=true;		
     }

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 21
    Par défaut
    Up

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 21
    Par défaut
    snif personne peut m'aider?

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    pourquoi ne pas faire ça dans un message privé .
    quand la condition est remplie tu envois un message pour faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    recset.MoveNext();
    message privé :
    http://www.developpez.net/forums/vie...567222#1567222
    en fait je comprends pas trop l'interet de ta boucle ...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 21
    Par défaut
    enfaite c'est un système de fiche . Chaque fiche contient des éléments d'enchainement des fiches. il y a deux grands type pour l'instant: enchaiement par temporisation ou par bouton. Pour chaque ligne excel=fiche, mon programme va regarder quel enchainement est necessaire et va ensuite éxecuter une variable (je rentre pas dans le detail du processus). Donc le programme ne doit pas changé de fiche avec le MoveNext tant que l'enchainement n'est pas fini ou validé! Le problème c'est que tout le système ODBC est dans une fonction et c'est difficile de la faire en global!


    donc le MoveNext je peux pas le mettre dans une autre fonction qui serait appellé par un message!

    Je sais pas trop si j'ai été clair!!!

  8. #8
    Membre expérimenté Avatar de BertrandA
    Inscrit en
    Août 2003
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 170
    Par défaut
    Le code est déja dans un while(!recset.IsEOF()) donc c'est difficile de faire tout ça dans un thread!
    Pourquoi ?

    donc le MoveNext je peux pas le mettre dans une autre fonction qui serait appellé par un message!
    Pourquoi ?

    Si j'ai bien compris, chaque enregistrement de la requête définit le séquentiel, la transition de chaque étape étant la fin d'une temporisation ou l'appui sur un bouton.
    Aucun problème pour faire ça dans un thread :
    - La tempo = voir CreateWaitableTimer()/WaitForSingleObject()
    - L'appui sur un bouton = détection d'un event. Voir CreateEvent()/SetEvent()/WaitForSingleObject()
    Et la section de la FAQ consacrée aux threads.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 21
    Par défaut
    Mes objets qui me permettent de communiquer avec ma base ODBC sont déclaré dans la fonction ils ne sont donc pas utilisable dans un thread à côté ou une autre fonction!

    MoveNext ne peux donc pas être dans une fonction en thread!

    Je dis pas de connerie la?

    toutes les fonction lié a l'ODBC doivent être dans la même fonction donc les thread ne êuvent rien pour moi !!

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 21
    Par défaut
    bon je reviens sur ce que j'ai tout mis mon traitement dans un thread mais chose bizarre il faut que je mette un AfxMessageBox dans mon thread pour que le système se débloque!!! si je l'enlève tout est figé??? solution?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UINT Threadgeneral(LPVOID param)
    {
    	AfxMessageBox("Début du test");
    	::PostMessage((HWND)param,WM_TEST,0,0) ;
    return 0 ;
    }
    mais merci deja pour m'avoir ouvert les yeux!

Discussions similaires

  1. Pop-up d'une dialog box a partir d'un bouton
    Par bobbyjack dans le forum MFC
    Réponses: 21
    Dernier message: 13/09/2005, 15h32
  2. redémarrer un prog à partir d'un bouton
    Par yokito dans le forum Langage
    Réponses: 5
    Dernier message: 06/09/2002, 13h19
  3. Réponses: 2
    Dernier message: 31/08/2002, 14h00
  4. Bmp pour boutons
    Par Fizgig dans le forum Outils
    Réponses: 5
    Dernier message: 22/08/2002, 10h56
  5. Afficher/Masquer un bouton comme IE 6
    Par benj63 dans le forum C++Builder
    Réponses: 3
    Dernier message: 29/07/2002, 13h12

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