gilleshugues
Messages postés4Date d'inscriptionmardi 22 novembre 2005StatutMembreDernière intervention30 juin 2009
-
17 janv. 2008 à 18:36
cs_charbit
Messages postés1Date d'inscriptiondimanche 20 juillet 2008StatutMembreDernière intervention20 juillet 2008
-
20 juil. 2008 à 15:42
Voila mon problème .
J'ai 2 applis qui échangent des données via un socket . L'appli qui questionne est en C++ (MFC) et celle qui
répond en VB . Jusqu'ici rien de méchant .
Mon appli C++ pose une question :
MainSocket.Send("QUESTION");
Puis attend la réponse de l'appli VB , mais avec un timeout de 2s , donc on doit sortir
de la boucle si on a des données dans le MainSocket , ou bien au bout des 2s (variable bTimeOut) .
Ca marche assez bien , mais si l'appli VB ne répond pas , et malgré le "PeekMessage" qui revient donc
à peu près au même qu'un DoEvents j'ai quand même la CPU qui monte à 50% environ , et mon menu
déroulant est comme "figé" .
J'ai entendu parler de Threads , mais je ne vois pas très bien ce que ça pourrait faire .
CWinApp* pApp = AfxGetApp();
MSG msg;
// Boucle d'attente (maxi 2 secondes)
do
{
// Récupère l'heure courante
ActualTime = CTime::GetCurrentTime();
// Regarde le nombre de secondes écoulées depuis le lancement (je sais
// à minuit ça va planter)
nsec = ActualTime.GetSecond() - BeginTime.GetSecond();
// Si on a passé 2 secondes alors Timeout pour sortir de la boucle
if (nsec > 2) bTimeout = true ;
// DoEvents
while ( PeekMessage ( &msg, NULL, 0, 0,PM_NOREMOVE )) pApp->PumpMessage();
}
while (MainSocket.m_strRecv.IsEmpty() && bTimeout == false);
nickydaquick
Messages postés416Date d'inscriptionvendredi 31 janvier 2003StatutMembreDernière intervention19 décembre 20133 17 janv. 2008 à 22:38
Salut
utilise un thread pour monitorer ta socket , avec un select .
dans le select utilise un timeout de 2secs(ou du nombre de secondes que tu veux) , si le select retourne au bout du timeout que tu n'as pas de reponse, alors agit en consequence.
ca c'est algorithme en gros (corrigez-moi si je rate qqch).
A moins de me tromper , ton application fige justement parce que tu fais une boucle et que tu attends que la socket te reponde , so si ton timeout est 10 secondes (imagine le client au SAHARA et toi en france)
ton appli va geler 10 secondes avant de prendre une decision....!
je suis heureux de faire partie d'une grande famille ...!
cs_charbit
Messages postés1Date d'inscriptiondimanche 20 juillet 2008StatutMembreDernière intervention20 juillet 2008 20 juil. 2008 à 15:42
Bonjour, je debute en C++ et j'ai besoin qu'un programme execute quelque chose si l'utilisateur n'a pas rentré une donnée dans les 20 secondes.
J'aurais par ailleurs besoin de rentrer des données dans une base de donnée (access) dans ces données figure le temps.....
Je ne sais pas du tout comment m'y prendre. Merci de m'aider.