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

Signaler
Messages postés
146
Date d'inscription
lundi 15 juin 2009
Statut
Membre
Dernière intervention
14 février 2013
-
Messages postés
146
Date d'inscription
lundi 15 juin 2009
Statut
Membre
Dernière intervention
14 février 2013
-
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

Messages postés
146
Date d'inscription
lundi 15 juin 2009
Statut
Membre
Dernière intervention
14 février 2013

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.
Messages postés
146
Date d'inscription
lundi 15 juin 2009
Statut
Membre
Dernière intervention
14 février 2013

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.
Messages postés
792
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
12 juillet 2019
8
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
Messages postés
146
Date d'inscription
lundi 15 juin 2009
Statut
Membre
Dernière intervention
14 février 2013

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.