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 :

[MFC] Probl�me avec affichage d'un gif et fonction bloquante


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    84
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 84
    Par d�faut [MFC] Probl�me avec affichage d'un gif et fonction bloquante
    Bonjour � tous !

    J'ai un probl�me assez complexe alors je vais essayer d'�tre le plus clair possible.

    J'ai un activeX qui permet de tranf�rer du contenu entre un serveur Http et le disque de l'utilisateur. Jusqu'ici tout va bien ...

    Pour cela j'utilise la biblioth�que WinHttp pour me connecter au serveur. Afin d'afficher la progression du transfert, j'affiche une boite de dialogue avec un texte et un gif anim�.

    Pour cela j'utilise la classe CPictureEx de CodeGuru (celle faite avec les MFC) : http://www.codeproject.com/bitmap/pictureex.asp.
    Donc en gros je lance ma m�thode download qui affiche ma boite de dialogue et qui se connecte � mon serveur.

    Le probl�me est que les fonctions de connection de WinHttp sont bloquantes notamment la fonction WinHttpReceiveResponse et donc mon gif anim� ne l'est plus du tout.

    J'ai essay� d'utiliser des threads mais je n'arrive pas � comprendre ce que je dois mettre en Thread, le rafraichissement de la boite de dialogue ? la fonction WinHttpReceiveResponse ?

    De plus je me suis aper�u que la classe CPictureEx utilis�e une thread pour afficher le gif anim�.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    m_hThread = (HANDLE) _beginthreadex(NULL,0,_ThreadAnimation,this,
    			CREATE_SUSPENDED,&nDummy);
    Ya t'il un moyen de rendre cette thread plus "prioritaire" ?

    J'esp�re avoir �t� assez clair et je vous remercie par avance de vos remarques.

    A+

  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
    moi je mettrais les fonctions de transfert dans un thread pour ne pas geler l'interface.

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    84
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 84
    Par d�faut
    Ok mais j'ai du mal � voir ce que je peux mettre dans le thread.

    Je t'explique l'entrelacement des fonctions.

    - A partir du javacript, j'appelle une m�thode appel�e ExportFile :
    - La m�thode ExportFile appelle une m�thode priv�e appel�e Download(url) :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    CString download(CString cUrl, CString cPath)
    - C'est cette m�thode download qui appelle l'affichage de ma boite de dialogue en faisant
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    myProgrBar = new CProgressBar();
    	if(myProgrBar != NULL)
       {
    	   BOOL ret = myProgrBar ->Create(IDD_PROGRESSBAR);
          if(!ret)   //Create failed.
    		  AfxMessageBox(GetResString(4));
       }
    et qui en plus se connecte au serveur et rappatrie le contenu
    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
     
    LPSTR pszData = _T("WinHttpWriteData Example");
        DWORD dwBytesWritten = 0;
        BOOL  bResults = FALSE;
        HINTERNET hSession = NULL,
                  hConnect = NULL,
                  hRequest = NULL;
     
        // Use WinHttpOpen to obtain a session handle.
        hSession = WinHttpOpen(  L"A WinHTTP Example Program/1.0", 
                                 WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
                                 WINHTTP_NO_PROXY_NAME, 
                                 WINHTTP_NO_PROXY_BYPASS, 0);
     
        // Specify an HTTP server.
        if (hSession)
            hConnect = WinHttpConnect( hSession, L"www.wingtiptoys.com",
                                       INTERNET_DEFAULT_HTTP_PORT, 0);
     
        // Create an HTTP Request handle.
        if (hConnect)
            hRequest = WinHttpOpenRequest( hConnect, L"GET",wRequest, 									NULL,WINHTTP_NO_REFERER, 
    						WINHTTP_DEFAULT_ACCEPT_TYPES, 0);
     
        // Send a Request.
        if (hRequest) 
            bResults = WinHttpSendRequest( hRequest, 
                                           WINHTTP_NO_ADDITIONAL_HEADERS, 0,
                                           WINHTTP_NO_REQUEST_DATA, 0, 
                                           strlen(pszData), 0);
     
     
        // End the request.
        if (bResults)
            bResults = WinHttpReceiveResponse( hRequest, NULL);
     
        //puis téléchargement
     
        // Report any errors.
        if (!bResults)
            printf("Error %d has occurred.\n",GetLastError());
     
     
        // Close any open handles.
        if (hRequest) WinHttpCloseHandle(hRequest);
        if (hConnect) WinHttpCloseHandle(hConnect);
        if (hSession) WinHttpCloseHandle(hSession);
    tu cr��rai un thread par m�thode WinHttp (genre WinHttpSendRequest, WinHttpReceiveResponse ?) et si c'est le cas, comment je fais pour qu'il utilise le m�me objet, l'objet hRequest par exemple ?

    Merci d'avance

  4. #4
    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
    oui a ta question ,
    tu peux faire transiter des infos au thread � sa creation : une structure un pointeur un handle ce que tu veux ..
    voir faq:
    http://c.developpez.com/faq/vc/?page...keWorkerThread

Discussions similaires

  1. [MFC] Probl�me avec un splitter
    Par julien.nasser dans le forum MFC
    R�ponses: 9
    Dernier message: 24/05/2006, 15h00
  2. Probl�me avec affichage d'une table modifi�e
    Par auriolbeach dans le forum Access
    R�ponses: 6
    Dernier message: 31/10/2005, 15h45
  3. R�ponses: 5
    Dernier message: 10/05/2005, 10h22
  4. [MFC] Probl�me avec un RichEdit et couleur
    Par Erakis dans le forum MFC
    R�ponses: 1
    Dernier message: 24/03/2005, 14h12
  5. [MFC] probl�me avec les insertions dans CComboBox
    Par Joeleclems dans le forum MFC
    R�ponses: 12
    Dernier message: 11/06/2004, 15h31

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