Utilisation de: Application->ProcessMessages(); car Erreur
cs_megamario
Messages postés145Date d'inscriptionlundi 15 juin 2009StatutMembreDernière intervention14 février 2013
-
13 nov. 2009 à 22:48
cs_megamario
Messages postés145Date d'inscriptionlundi 15 juin 2009StatutMembreDernière intervention14 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.
cs_megamario
Messages postés145Date d'inscriptionlundi 15 juin 2009StatutMembreDernière intervention14 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.
cs_megamario
Messages postés145Date d'inscriptionlundi 15 juin 2009StatutMembreDernière intervention14 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.
cs_louis14
Messages postés793Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention10 février 20218 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;
cs_megamario
Messages postés145Date d'inscriptionlundi 15 juin 2009StatutMembreDernière intervention14 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.