Ping zeigt immer 0 an / Programm ruckelt



  • Sodele nachdem ich die FAQ verstanden und mein kleines Problem der vergeslichkeit gelöst wurde dank euch hab ich nun ein weiteres. Es muss ja keine Lösung sein über ne Idee mit der ich weiter machen kann währ ich auch schon froh (wenn ich sie mit meinem Wissen verstehe *g*)

    Problem 1: der Ping zeigt immer 0 an (liegt aber lauf "ping IP" in cmd bei ~35)
    Problem 2: Die ersten 2 Sec. geht alles glatt danach stockt das Programm und reagiert nur noch sporadisch wenn überhaupt. Beenden nur übern Taskmanager möglich.
    Denke das beides Zusammen hängt:

    die neuen Code abschnitte sind:

    unsigned int m_nEventId_pingtimer = 1;
    unsigned int m_nElapse_pingtimer   = 2000;
    unsigned int m_nTimerId_pingtimer = 1;
    
    //in OnInitDialog
    
        m_nTimerId_pingtimer = SetTimer(m_nEventId_pingtimer, m_nElapse_pingtimer, NULL);
    
    //dann 
    
    void CDAOCPingDlg::OnTimer(UINT nIDEvent) 
    {   
        if(nIDEvent == m_nEventId_pingtimer)
        {
            UpdatePing();
        }
        if(nIDEvent == m_nEventId_datatimer)
        {
            UpdatePlayerData();
        }
    
        //CDialog::OnTimer(nIDEvent);
    }
    
    //und die UpdatePing() sieht so aus (updatePlayerData is leer)
    
    void CDAOCPingDlg::UpdatePing()
    {
        CPing Ping;
    
        int nTime_avalon;
        int nTime_stonehenge;
        int nTime_dartmoor;
        int nTime_logres;
        int nTime_lyonesse;
    
        nTime_avalon = Ping.Ping("193.252.123.45");
        nTime_stonehenge = Ping.Ping("193.252.123.14");
        nTime_dartmoor = Ping.Ping("193.252.123.135");
        nTime_logres = Ping.Ping("193.252.123.134");
        nTime_lyonesse = Ping.Ping("193.252.123.11");
    
        m_ping_avalon.Format("%d",nTime_avalon);
        m_ping_stonehenge.Format("%d", nTime_stonehenge);
        m_ping_dartmoor.Format("%d", nTime_dartmoor);
        m_ping_logres.Format("%d", nTime_logres);
        m_ping_lyonesse.Format("%d", nTime_lyonesse);
    
        UpdateData(FALSE);
    
    }
    

    Bei garantiert bestehender Verbindung ist der damit angezeigt Ping immer 0 (null nix nada) nach kontrolle in der Kommandozeile jedoch nicht.. 😕

    Hat wer nen Tipp?



  • nach 2 Sekunden wird das erste mal OnTimer aufgerufen, was bedeutet, dass es an deiner UpdatePing-Methode liegen muss ...



  • Deswegen meine Vermutung das das zusammen hängt.
    An dem Konvertieren von int zu CString und dem Anzeigen kann es ja nich liegen, deshalb bleiben nur diese Pings als Ursache - denke mal das da auf irgendwas gewartet wird was nie kommt (deshalb auch ping immer == 0).
    Nur habe ich (selberschreiben kann ich's noch nicht und gelobte FAQ sei dank) die Angaben aus der MFC-FAQ übernommen. Wenn ich im angezeigten teil nichts falsch gemacht habe (dachte nich, nun das du nix sag...(sie nichts sagten?) denke ich ebenfalls das da alles Stimmt) muss es (hoffe meine logik stimmt so weit) an dem "modell" das in der faq steht liegen - eigendlich auch unw*****einlich. deshalb meine Ratlosigkeit. Fuktioniert denn die Faq-Lösung bei euch richtig?



  • Man könnte deine (wir duzen uns hier) Funktion ein wenig verkürzen:

    CPing Ping;
        m_ping_avalon.Format("%d",Ping.Ping("193.252.123.45"));
        m_ping_stonehenge.Format("%d", Ping.Ping("193.252.123.14"));
        m_ping_dartmoor.Format("%d", Ping.Ping("193.252.123.135"));
        m_ping_logres.Format("%d", Ping.Ping("193.252.123.134"));
        m_ping_lyonesse.Format("%d", Ping.Ping("193.252.123.11"));
    
        UpdateData(FALSE);
    

    Mach mal ne MessageBox vor UpdateData(FALSE); Wenn die nach 2 Sekudnen angezeigt wird, also bevor der Rechner so anfängt zu hängen liegt der Fehler eher nciht in den Pings. Falls die MessageBox nicht oder erst sehr spät angezeigt wird, liegts an den Pings und man kann sich die mal genauer anschauen.



  • Nun gut ich hab die MessageBoxes mal eingbaut (2 an der Zahl) und das ganze schaut nun so aus:

    void CDAOCPingDlg::UpdatePing()
    {
        CPing Ping;
    
        MessageBox("Starte Pings", "Testbox", MB_OK);
    
        m_ping_avalon.Format("%d",Ping.Ping("193.252.123.45"));
        m_ping_stonehenge.Format("%d", Ping.Ping("193.252.123.14"));
        m_ping_dartmoor.Format("%d", Ping.Ping("193.252.123.135"));
        m_ping_logres.Format("%d", Ping.Ping("193.252.123.134"));
        m_ping_lyonesse.Format("%d", Ping.Ping("193.252.123.11"));
    
        MessageBox("Pings vorbei", "Testbox", MB_OK);
    
        UpdateData(FALSE);
    }
    

    MessageBox 1 erscheint brav nach 2 sec - danach ist für knapp 30sec stillstand und sie erscheint nochmal(!!) - dann hängt das ganze programm fest und es hilft nur noch taskmanager. Ändert auch nix wenn ich erstmal nur 1 server drin lasse für's pingen und den rest auskommentiere.
    Wenn ich es so weit richtig verstehe heisst das dann doch:
    1.) timer löst aus und es wird verscuht zu pingen
    2.) dabei geht was schief bzw hängt sich was "halb" auf
    3.) mit etlicher verzögerung werden die Nachrichten mal wieder abgearbeitet und UpdatePing() startet von neuem (2tes mal die erste msgbox) - und hängt sich diesmal ganz auf.


Anmelden zum Antworten