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

MFC Discussion :

Problème de lenteur d'ouverture de com avec CreateFile


Sujet :

MFC

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Par défaut Problème de lenteur d'ouverture de com avec CreateFile
    Salut,


    J'utilise la fonction CreateFile pour pour déterminer sur quel port de communication série est connecté un device série.

    Quand aucun device n'est connecté, je scanne les ports 1 à 32. Sur ma machine Vista pas de problème, par contre sur une machine Windows XP SP3 cela rame de manière incroyable.

    le code utilisé est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	for(i=min;i<max;i++)
    	{
    		TCHAR sz[20];
    		_stprintf_s(sz,SIZEOFINTCHAR(sz),_T("\\\\.\\COM%d"), i); 
    		HANDLE hCom = CreateFile( sz,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL );
    		if (hCom != INVALID_HANDLE_VALUE)
    		{
                                 ....
                               }
                		else
                                   CloseHandle(hCom);		
                }

    Existe t'il une alternative a create file pour detecter qu'un certain port série est disponible (sans spécialement l'ouvrir)?

    Merci


    Merci

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut et comme ça ?:
    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
        //Form the Raw device name
        CString sPort;
        sPort.Format(_T("\\\\.\\COM%d"), i);
     
        //Try to open the port
        BOOL bSuccess = FALSE;
        HANDLE hPort = ::CreateFile(sPort, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
        if (hPort == INVALID_HANDLE_VALUE)
        {
          DWORD dwError = GetLastError();
     
          //Check to see if the error was because some other app had the port open or a general failure
          if (dwError == ERROR_ACCESS_DENIED || dwError == ERROR_GEN_FAILURE || dwError == ERROR_SHARING_VIOLATION)
            bSuccess = TRUE;
        }
    else
    {
    //The port was opened successfully
          bSuccess = TRUE;
     
          //Don't forget to close the port, since we are going to do nothing with it anyway
          CloseHandle(hPort);
    }

  3. #3
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    sinon il y a aussi la possibilité de regarder dans la base de registre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Serial\Enum
    ou
    HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Par défaut
    Merci Farscape,
    En fait c'est la fonction CreateFile qui me pose problème. Le problème a l'air de se produire quand des ports BlueTooth sont présent sur le PC. Il est présent aussi bien sur XP que sur Vista. Par exemple une machine XP-Pro avec +sieurs port bluetooth met 15 secondes pour scanner les ports 1 à 32.
    Le même scanning sur un portable Vista avec 4 port bluetooth 11 sec, la m^me opération sur mon portable ss port bluetooth moins d'une seconde.
    Les machines sont de puissance équivalente, core 2 duo 2GHZ.
    J'ai modifié le code pour éviter ces fameux ports BT et je passe de 11 sec à moins d'une seconde.
    Mon problème est maintenant d'identifier les ports BT pour les éviter.
    Je scanne les port déclarés dans le registry sous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM
    mais comment identifier à coup sur les BT?

Discussions similaires

  1. Réponses: 5
    Dernier message: 20/12/2010, 18h16
  2. problème de lenteur avec BO
    Par darwini dans le forum Débuter
    Réponses: 2
    Dernier message: 13/04/2007, 14h08
  3. Problème de lenteur avec 2 sous-formulaires
    Par picatchou dans le forum Access
    Réponses: 1
    Dernier message: 29/01/2007, 08h48
  4. Problème d'ouverture de fenêtre avec ie6.
    Par volontier dans le forum IE
    Réponses: 2
    Dernier message: 11/10/2006, 15h16
  5. Réponses: 15
    Dernier message: 23/06/2006, 13h09

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