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

C++ Discussion :

MultiThread et fonction InternetOpen


Sujet :

C++

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut MultiThread et fonction InternetOpen
    Bonjour, j'utilise ce code pour recuperer certaines pages web particulieres,

    cette fonction est utilisé par plusieurs thread et du coup, peut etre appelée simultanément (ou presque) par plusieures taches en parallele,

    la ou je m'interroge, c'est au niveau de la fonction InternetOpen, son premier parametre est fixe, je me demande si cela pose un probleme par rapport a l'appel simultanné avec ce meme parametre.

    A votre avis, cela pose t'il un probleme ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    CString GetWebPage(CString url)
    {
    	#define TAILLE_BUFFER 256
     
    	CString sRead = "";	
     
     
    	HINTERNET hInternetSession, 
    			  hHttpSession;
     
    	char buffer[TAILLE_BUFFER];
     
    	DWORD dwRead;
     
    	DWORD dwSize = 20;
    	LPVOID lpOutBuffer = new char[dwSize];
     
     
    	hInternetSession = InternetOpen ("test", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, NULL) ;
    	if (hInternetSession)
        {
    	   hHttpSession  = InternetOpenUrl( hInternetSession, url, NULL, 0, INTERNET_FLAG_NO_CACHE_WRITE, 0 ) ;
    	   if (!hHttpSession)
    	   {
    		   InternetCloseHandle (hInternetSession) ;
    		   sRead = CST_WEB_RES_BADCONN;
    		}
    	   else
    	   {
    		   //*************************************************************************************//
    		   //							Lecture du HEADER HTTP									  //
    		   //*************************************************************************************//
    			sprintf((char *)lpOutBuffer,"Content-Type");
    			if(!HttpQueryInfo(hHttpSession,HTTP_QUERY_CUSTOM, (LPVOID)lpOutBuffer,&dwSize,NULL))
    			{
    				if (GetLastError()==ERROR_HTTP_HEADER_NOT_FOUND)
    				{
    					// Code to handle the case where the header isn't available.
    					sprintf((char *)lpOutBuffer,"");
    				}		
    				else
    				{
    					// Check for an insufficient buffer.
    					if (GetLastError()==ERROR_INSUFFICIENT_BUFFER)
    					{
    						sprintf((char *)lpOutBuffer,"Content-Type");				
    					}		
    					else
    					{
    						// Error handling code.
    						sprintf((char *)lpOutBuffer,"");
    					}		
    				}		
    			}
    			if (strcmp("Content-Type", (char *)lpOutBuffer)!=0) // erreur
    			{
    				if (strcmp("text/bad_pw", (char *)lpOutBuffer)==0)
    				{
    					sRead = CST_WEB_RES_BADLOG;
    				}
    				else if (strcmp("text/good_pw", (char *)lpOutBuffer)==0)
    				{
    					sRead = CST_WEB_RES_GOODLOG;
    				}
    				else if (strcmp("text/ko", (char *)lpOutBuffer)==0)
    				{
    					sRead = CST_WEB_RES_SERVERROR;
    				}
    				else if (strcmp("text/ok", (char *)lpOutBuffer)==0)
    				{
    					sRead = CST_WEB_RES_OK;
    				}
    				else if (strcmp("text/plain", (char *)lpOutBuffer)!=0)				
    				{
    					sRead = CST_WEB_RES_ERROR;
    				}
     
    			}
    			//*************************************************************************************//
     
    			if (sRead=="")
    			{
    				while ( InternetReadFile( hHttpSession, buffer, TAILLE_BUFFER-1, &dwRead ) )
    				{
    					if ( dwRead == 0 )
    						break;
    					buffer[dwRead] = 0;
    					sRead += buffer;
    				}
    			}
     
    			InternetCloseHandle( hHttpSession );
    			InternetCloseHandle (hInternetSession) ;
    	   }
       }
     
    	delete lpOutBuffer;
     
    	return sRead;
    }

  2. #2
    Membre éclairé Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Par défaut
    Selon moi cela ne pose pas de problème. Renseigne toi tout de meme pour savoir si cette fonction est tread safe ou non.

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut
    comment (ou) je peux savoir ca ?

  4. #4
    Membre éclairé Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Par défaut
    Tu as dur lire le prototype de ta fonction quelque part avant de t'en servir... il doit bien y avoir de la documentation dessus. En général c'est stipuler si la méthode est thread safe ou non... Si ce n'est pas expliquer bah fait comme ci ca ne l'était pas et ajoute des sections critiques dans ton code.

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut
    ok, merci

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Il suffit que la fonction soit réentrante, pas thread-safe.
    Et a priori d'après son interface il n'y a pas de raison que ce ne soit pas le cas.

  7. #7
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut
    comment ca "réentrante" ?

  8. #8
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549

  9. #9
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut
    vu.

Discussions similaires

  1. Multithread et retour de fonction
    Par tntneo dans le forum Langage
    Réponses: 2
    Dernier message: 19/03/2010, 00h12
  2. Multithread et fonction de log
    Par remus2968 dans le forum Langage
    Réponses: 5
    Dernier message: 16/06/2008, 16h00
  3. Réponses: 2
    Dernier message: 21/02/2008, 20h05
  4. Réponses: 14
    Dernier message: 18/07/2007, 15h28
  5. [tcplistener]fonction bloquante et multithread
    Par ronan99999 dans le forum C#
    Réponses: 1
    Dernier message: 23/05/2007, 15h02

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