Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C++CLI / VB .Net / .Net-Framework » Programm bleibt einfach stehen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
03.07.2006, 16:18 Uhr
Eroli



Hallo Leute,

wieso bleibt dieses Programm immer stehen? Ohne Ausnahme ohne nix.

C++:
{
    internal sealed partial class StatisticsControl : UserControl
    {
        int item = 0;

        int count = 0;

        double AverageDown2 = 0;

        double AverageUp2 = 0;

        double[] AverageDown = new double[60];
        
        double[] AverageUp = new double[60];

        double[] uploadListArray = new double[31];
        
        double[] downloadListArray = new double[31];

        PointPairList uploadList = new PointPairList();

        PointPairList downloadList = new PointPairList();


        public StatisticsControl()
        {
            InitializeComponent();
        }
      
        private void updateTimer_Tick(object sender, EventArgs e)
        {
            CalculateAverage();
        }



        public void CalculateAverage()
        {

            AverageDown[count] = Convert.ToDouble(Core.Downstream);
            AverageUp[count] = Convert.ToDouble(Core.Upstream);
            try
            {
                GraphEngine(Convert.ToDouble(downstreamTestTextBox.Text), Convert.ToDouble(upstreamTestTextBox.Text));
            }
            catch (Exception caught)
            {
                MessageBox.Show("Folgender Fehler trat auf: " + caught.Message);
            }
            
            //if (count == 59)
            //{
            //    foreach (double DownValue in AverageDown)
            //    {
            //        AverageDown2 = AverageDown2 + DownValue;
            //    }
            //    foreach (double UpValue in AverageUp)
            //    {
            //        AverageUp2 = AverageUp2 + UpValue;
            //    }
            //    GraphEngine(AverageDown2 / 60, AverageUp2 / 60);
            //    count = 0;
            //    AverageUp2 = 0;
            //    AverageDown2 = 0;
            //}
            //count++;
        }

        public void GraphEngine(double Down, double Up)
        {
            uploadListArray[item] = Up;
            downloadListArray[item] = Down;
            if (item == 30)      
            {
                item = 29;
                uploadList.Clear();
                downloadList.Clear();
                for (int i = 0; i != 29; i++)   //Nennen wir das Schleife A
                {
                    uploadList.Add(i, uploadListArray[i + 1]);
                    downloadList.Add(i, downloadListArray[i + 1]);
                }
            }
            else
            {
                uploadList.Add(item, Up);
                downloadList.Add(item, Down);
            }
            item++;
            ToGraph();
        }


        public void ToGraph()
        {
            SpeedZedGraphControl.Refresh();
        }
   }
}




Da oben wurden ein paar Zeilen auskommentiert, aber nur zu Testzwecken, die bewirken das der Durchschnitts wert aus 60 Sekunden ermittelt wird.

Also das funzt alles wunderbar bis das erste Mal "Schleife A" ausgeführt wurde. Wenn das ausgeführt wird klappt alles wunderbar und alle Werte rücken um eins nach hinten. aber dann steht alles. wieso?


Viele Grüße,

Eroli

Dieser Post wurde am 03.07.2006 um 16:18 Uhr von Eroli editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.07.2006, 20:48 Uhr
Eroli



Hat keiner einer Idee???


Gruß,

Eroli
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.07.2006, 07:23 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
Debugger schon benutzt?
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 04.07.2006 um 07:23 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
23.07.2006, 23:37 Uhr
Eroli



Irgendwie bin ich zu doof das zu debuggen!! :-(
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.07.2006, 12:17 Uhr
~jas0n
Gast


wenn du im Visual studio im main menu auf debug->exceptions klickst krigst ein neues fenster. in diesem fenster musst bei Common language runtime exceptions beide checkboxes aktivieren. dann bleibt dir der debugger auf jeden fall stehen wenn eine exception auftritt und zeigt die eine popup box mit der exception an.

vielleicht hilfts ja.

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
02.08.2006, 08:10 Uhr
Marco Griep



Hab mir deinen Code zwar nicht angeschaut.
Aber ich denke es kann an den "Arrays" liegen.
Wenn die Anzahl überschritten oder Unterschritten wird sollte eine Fehlermeldung
oder so kommen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
06.08.2006, 13:03 Uhr
Eroli



Es kommt keine Fehlermeldung. es passiert einfach nichts mehr.

Werd diesen Code jetzt in einem Extra Programm unterbringen und dort den Fehler suchen, das wird wohl leichter als das ganze Projekt zu debuggen!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
06.08.2006, 13:48 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
Nun stell Dich nicht so an . Beim Überfliegen Deines Quellcodes ist mir folgendes aufgefallen:
Das TimerEvent

C++:
private void updateTimer_Tick(object sender, EventArgs e)
{
            CalculateAverage();
}


ruft CalculateAverage(); auf. Nach jedem Durchlauf wird "item" inkrementiert. Wenn "item" = 30 ist, wird "item" auf den Wert von 29 gesetzt. Nach verlassen des Blockes jedoch wieder um den Wert 1 inkrementiert. Also hat "item" wieder den Wert 30. Der Timer löst das nächste Ereignis aus. Da "item den Wert 30 hat, beginnt das Spiel wieder von vorn.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 06.08.2006 um 13:51 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
06.08.2006, 17:02 Uhr
Eroli



Ja so sollte das auch eigentlich sein.

Erreichen wollte ich damit, dass sich die Elemente in der UploadList und DownloadList so verschieben, dass das älteste Element verschwindet.

Hab ich da einen Denkfehler gemacht???


EDIT: Also, wie gesagt, einmal klappt das ganze wie gewollt, doch dann verschieben sich die Elemente nicht mehr so, dass das älteste Element verschwindet. Wieso?

Hab den Quellcode mal so geändert:
[code]
if (item == 30 || item > 30)
{
[...]
}
[/Code]

Hab nur die IF-Schleife geändert, der Rest ist wie oben, aber helfen tut es nichts. "||" ist doch der logische "Oder"-Operator, oder?


EDIT2: ich glaub der Fehler liegt bei den Arrays. Kann es sein, das diese keine anderen Werte kriegen, wegen dem indexer "item"?? Irgendwie gefällt mir das nicht wirklich............

EDIT3: Liegt wohl an den Arrays, weil "item" wird nachdem es einmal größer als 29 war ja nie mehr kleiner. somit änder sich doch nur noch der letzte Wert des Arrays...........

Dieser Post wurde am 06.08.2006 um 17:23 Uhr von Eroli editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
06.08.2006, 18:19 Uhr
Eroli



Sodele: Das ganze lag wirklich an den Arrays und dem Indexer:

Die neue GraphEngine sieht so aus:

Code:
public void GraphEngine(double Down, double Up)
        {
            uploadListArray[item] = Up;
            downloadListArray[item] = Down;
            if (item == 30 || item > 30)
            {
                item = 29;
                uploadList.Clear();
                downloadList.Clear();
                for (int i = 0; i != 30; i++)
                {
                    uploadList.Add(i, uploadListArray[i + 1]);
                    downloadList.Add(i, downloadListArray[i + 1]);
                }
                //Move Arrayobjects
                for (int i = 0; i != 30; i++)
                {
                    uploadListArray[i] = uploadListArray[i + 1];
                    downloadListArray[i] = downloadListArray[i + 1];
                }
            }
            else
            {
                uploadList.Add(item, Up);
                downloadList.Add(item, Down);
            }
            item++;
            ToGraph();
        }



und jetzt klappt es auch wunderbar.

Danke nochmal an Uwe für den Denkanstoss!!!! THX!!


MfG,
Eroli
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C++CLI / VB .Net / .Net-Framework ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: