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

wxWidgets Discussion :

Ping dans une fenêtre wxWidget


Sujet :

wxWidgets

  1. #1
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut Ping dans une fenêtre wxWidget
    Bonjour , je souhaiterais savoir la méthode à implémenter pour réussir à executer un ping dans une frame wxFrame? ou wxTextCtrl de façon asynchrone (pour éviter le blocage) mais que la requete soit affichée régulièrement .
    Merci.

    Je pense à utiliser un wxProcess , un wxExecute ..Mais ensuite ca se complique..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
      wxProcess* process = new wxProcess();
       process->Open(_("C:/WINDOWS/system32/Ping.exe www.google.com")); 
     
       if(process == NULL)
        {
          wxMessageBox("Could not start encrypt process");
          return;
        }
     
        process->Redirect();
        wxOutputStream* outputStream = process->GetOutputStream();

  2. #2
    Membre éprouvé Avatar de Jérémy Lefevre
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 898
    Points : 969
    Points
    969
    Par défaut
    Salut cotede2,
    Alors ton probleme viens que ton interface graphique est bloqué lorsque tu lance un autre process de ton programme ce qui est tout à fait normal,
    ce qui me vient tout de suite a l'esprit c'est faire un thread dans lequel tu fait ton ping avec la maniere de ton choix , une fois que tu as recu la réponse tu envoi un event à ta gui qui va ce chargé d'affiché la valeur du temp de reponse si le ping a reussi....

    exemple :
    Ping.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    extern const wxEventType gmEVT_MESSAGE_ANONY;
    class Ping : public wxThread
    {
          ..... constructeur, destructeur , autres fonctions ....
          wxCommandEvent *evt;
          void* Entry(); //virtual methode from wxThread.h  //this method can't be call directly
    }
    Ping.cpp
    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
    extern const wxEventType gmEVT_MESSAGE_ANONY = wxNewEventType();
    Ping::Ping(....) : wxThread(wxTHREAD_JOINABLE)
    {
       ......
        this->evt=new wxCommandEvent(gmEVT_MESSAGE_ANONY,1);
    }
    void* Ping::Entry()
    {
         .......
         //Ici fait ton ping et récupère le resultat de ta requete Ping
         evt->SetString(/* un chaine qui contient le res de ta requete ping */); 
         //tu peut egalement utilisé SetInt
         .....
         return 0;
    }
    ton interface header
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class TMyApp : public wxApp
    {
    public:
        virtual bool OnInit();
    };
    //------------------------------------------------------------------------------
    class TMyFrame : public wxFrame
    {
         .....
         Ping *pg;
         void OnPingEvt(wxCommandEvent& event);
         DECLARE_EVENT_TABLE()
    };
    definition de classe de ton interface
    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
     
    BEGIN_EVENT_TABLE(TMyFrame, wxFrame)
         EVT_COMMAND(1,gmEVT_MESSAGE_ANONY,TMyFrame::OnPingEvt)
    END_EVENT_TABLE()
    IMPLEMENT_APP(TMyApp) 
    .....
    TMyFrame::TMyFrame(.......) : wxFrame(.....)
    {
        pg->Create();
        pg->Run();
        //place le Create et le Run dans le constructeur si tu veux lancer le ping lorsque tu lance ton application sinon fait un event sur le clique d'un bouton par exemple
    }
    void TMyFrame::OnPingEvt(wxCommandEvent& event)
    {
        string s=this->pg->evt->GetString();
        ...... // fait ton affichage ici 
    }

    Biensur je te laisse etoffer le restant mais je pense que c'est deja un bon debut pour toi
    bon courage jérémy

  3. #3
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut
    merci beaucoup.
    Je me suis aussi aidé des samples proposés.

    http://www.wxwidgets.org/downloads/

    Le Sample Exec montre plein d'exemple de process lancés en parralèle et on a beaucoup de choix (asynchrone - synchrone ..)

    Maintenant pour le blocage , je vais étudier ça de plus près.

  4. #4
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut
    En gros voici la code


    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
    MyPipedProcess *process = new MyPipedProcess(this, cmd);
            if ( !wxExecute(cmd, wxEXEC_ASYNC, process) )
            {
                wxLogError(_T("Execution of '%s' failed."), cmd.c_str());
     
                delete process;
            }
     
     
         else{
                 ( m_running.IsEmpty() )
                {
                  // we want to start getting the timer events to ensure that a
                  // steady stream of idle events comes in -- otherwise we
                  // wouldn't be able to poll the child process input
                  m_timerIdleWakeUp.Start(100);
               }
              //else: the timer is already running
               m_running.Add(process);
     
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher un shell dans une fenêtre wxWidget
    Par BlueCat dans le forum wxWidgets
    Réponses: 3
    Dernier message: 05/09/2006, 22h38
  2. Réponses: 6
    Dernier message: 22/12/2004, 11h00
  3. Perte de gestionnaire d'événements dans une fenêtre
    Par Benjamin GAGNEUX dans le forum Composants VCL
    Réponses: 15
    Dernier message: 23/08/2004, 20h14
  4. Supprimer la croix dans une fenêtre modale
    Par AnneOlga dans le forum C++Builder
    Réponses: 3
    Dernier message: 15/01/2004, 14h52
  5. [JDialog] Modification dans une fenêtre
    Par cefabien dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 01/10/2003, 13h18

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