Utilisation de: Application->ProcessMessages(); car Erreur

cs_megamario Messages postés 145 Date d'inscription lundi 15 juin 2009 Statut Membre Dernière intervention 14 février 2013 - 13 nov. 2009 à 22:48
cs_megamario Messages postés 145 Date d'inscription lundi 15 juin 2009 Statut Membre Dernière intervention 14 février 2013 - 16 nov. 2009 à 10:11
Bonsoir,

J'ai un petit souci, on viens de finir un client pour faire un MiniChat au lycée.
Les prof nous avais proposer de faire:
->Un bouton pour se connecter
->Un bouton pour demander si le login est dispo
->Un bouton pour rafraichir les personne logger sur le serveur
J'y suis arrivé cela marche nickel.

Mais en tant que vieux parmi les élèves de 20 ans qui n'ose pas demander des conseils.
j'ai donc demandé comment faire pour que lorsque l'on appuis sur Connecter cela enchaine les 3 fonctions de base Connecter->login->logger.
sachant que l'évènement du socket Read ne se déclenche qu'en sortant de la méthode BoutonConnexionClick.

Le prof m'a proposer d'utilisé
Application->ProcessMessages();

Mais j'ai un gros plantage avec un message d'erreur a la lecture de ce ProcessMessages()

Project LeClient.exe raised exception class EAccessViolation with message 'Access violation at address 40009720 in module 'rtl60.bpl'.Read of address 97D82603'.Process stopped. Use Step or Run to continue;

Avec une case a cocher: View CPU Windows
et avec 2 bouton OK et HELP

Voici un bout de mon code:
ClientSocket1->Port = EditPort->Text.ToInt() ;
ClientSocket1->Address = EditIP ->Text;
// Ouverture du Client IP
ClientSocket1->Active = true;

Sleep(100);

        while(!Drapeau)  //Drapeau étant un bool pour gérer la réception de la ligne.
        {
                Application->ProcessMessages();
                Sleep(100);
        }
        Sleep(100);
        if (!Erreur)     //Erreur étant un bool pour sortir en cas d'une mauvaise ligne recu
        {
                DemanderLogin();
                while(!Drapeau)
                {
                        Application->ProcessMessages();
                        Sleep(100);
                }
                Sleep(100);
                if (!Erreur)
                {
                        DemanderLogger();
                        while(!Drapeau)
                        {
                                Application ->ProcessMessages();
                                Sleep(100);
                        }
                        if (Erreur)
                               ShowMessage("Erreur de récupération des logger");     
                }
                else
                       ShowMessage("Erreur de login");
        }
        else
               ShowMessage("Erreur de connexion");


J'ai tenté de rajouter des Sleep mais sans effet car de tout maniere cela plante au 1er access de ProcessMessages();

Je précise que je suis sous Seven avec un Core2Duo.



Technicien en électricité Industriel (39 ans), en cours de reconversion BTS IRIS 2eme Année.
Au lycée pendant l'année scolaire, et en stage pendant les vacances scolaire.

4 réponses

cs_megamario Messages postés 145 Date d'inscription lundi 15 juin 2009 Statut Membre Dernière intervention 14 février 2013
13 nov. 2009 à 22:59
J'ai fait l'essaie sous XP Mode et même defaut


Technicien en électricité Industriel (39 ans), en cours de reconversion BTS IRIS 2eme Année.
Au lycée pendant l'année scolaire, et en stage pendant les vacances scolaire.
0
cs_megamario Messages postés 145 Date d'inscription lundi 15 juin 2009 Statut Membre Dernière intervention 14 février 2013
14 nov. 2009 à 14:27
Personne pour me renseigner


Technicien en électricité Industriel (39 ans), en cours de reconversion BTS IRIS 2eme Année.
Au lycée pendant l'année scolaire, et en stage pendant les vacances scolaire.
0
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
16 nov. 2009 à 09:13
Bonjour,
Que contient cette fonction "ProcessMessage"?

Avez-vous essayé de déclencher une thread qui contient votre procedure (dans la procedure du premier click). Comme cela la boucle des messages continue sans être perturbée.

1. Lancer une thread dont le code contient un automate de ce type :

BOOL continuer = TRUE;
int step = 0;
while(continuer == TRUE)
{
switch(etape)
{
case attente_connexion://avec time_out
if(connecter)
step ++;//action suivante
else if time_out
step = erreur;
break;
case demander_login:
step++;
break;
case attente_reponse:// avec time_out
if(reponse)
step++;//action suivante
else if time_out
step = erreur;
break;
case demander_logger
step++;
break;
case attente_logger:
if(reponse)
step = fin;
else if time_out
step = erreur;
break;
case fin :
continuer = FALSE;
break;
case erreur :
continuer = FALSE;
message d'erreur;

}
Sleep(100);
}

Bon travail

louis14
0
cs_megamario Messages postés 145 Date d'inscription lundi 15 juin 2009 Statut Membre Dernière intervention 14 février 2013
16 nov. 2009 à 10:11
Bonjour,

ProcessMessage n'est pas une méthode que j'ai crée. C'est une fonction disponible. Qui est sensée dire au logiciel de traiter les évènements qui sont arrivés, afin de ne pas bloquer le logiciel.
Application->ProcesseMessage();

Mais j'ai résolu mon problème car c'est bourland qui est trop susceptible.
Mon code proviens du lycée, et pourtant utilisant la même version il ne veut pas que j'utilise cette fonction dans l'état. j'ai donc recrée un projet en entier et la cela marche nickel.

Bonjour l'intégration de programme si l'on travaille à plusieurs!!


Technicien en électricité Industriel (39 ans), en cours de reconversion BTS IRIS 2eme Année.
Au lycée pendant l'année scolaire, et en stage pendant les vacances scolaire.
0
Rejoignez-nous