Autor Beitrag
sabi_14
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40



BeitragVerfasst: Di 06.05.08 09:58 
Hallo zusammen,
ich habe da ein Problem.
Also, ich möchte eine möglichst genaues Ping Resultat, deshalb möchte ich folgendes machen:
Ich möchte 6mal den Ping im Hintergrund aufrufen und dann alle erhaltenen Werte zusammenzählen.
Dann zähle ich den ersten Wert von der Summe ab, weil die erste Zahl sehr hoch ist und deshalb ein
ungenaues Resultat ausgibt.
Dann teile ich die erhaltene Zahl durch 5, somit müsste ich eigendlich auf den Durchschnitt kommen.
Nun bekomme ich aber eine Unrealistische Zahl heraus. Also minus Werte und das darf nicht sein.
Ich finde den Fehler einfach nicht. Wäre froh, wenn jemand meinen Code durchsehen könnte und mir sagen
könnte, was ich falsch mache.

Danke schonmal.
Gruss
Sabi
ausblenden volle Höhe Delphi-Quelltext
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:
procedure TfrmPing.btnStartClick(Sender: TObject);
var
  zahl: Integer;
  ergebnis: Double;
  firsttime: Integer;
  i: Integer;
begin
  edtMemo.Lines.Add('Ping:');
  angaben();

  zahl:=0;
  firsttime:=IdIcmpClient1.ReplyStatus.MsRoundTriptime;
  for i:=0 to 5 do
    begin
      angaben();
      zahl:=zahl+IdIcmpClient1.ReplyStatus.MsRoundTriptime;
    end;

  ergebnis:=zahl-firsttime;
  ShowMessage(FloatToStr(ergebnis/5));

  if IdIcmpClient1.ReplyStatus.MsRoundTriptime > IdIcmpClient1.ReceiveTimeout then
    edtMemo.Lines.Add('Zeitüberschreitung! Es konnte keine Verbindung hergestellt werden.')
  else
    edtMemo.Lines.Add(Format('Zeit: %d ms',
      [IdIcmpClient1.ReplyStatus.MsRoundTriptime]));
end;

procedure TfrmPing.angaben();
begin
  IdIcmpClient1.Host:='192.168.3.8';
  IdIcmpClient1.Ping();
end;

noch zur Info, ich gebe meine Berechnung wie ihr seht mal nur in einer MessageBox aus.
Dies habe ich mal so gemacht, damit ich erst wenn ich sicher bin das Resultat in mein Memo
hineingeschrieben wird. Momentan wird ja einfach nur der aktuelle Wert des Ping in das Memo
geschrieben. Also euch nicht wundern.
Danke.

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: Di 06.05.08 10:05 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
zahl:=0;
firsttime:=IdIcmpClient1.ReplyStatus.MsRoundTriptime;
for i:=0 to 5 do
begin
angaben();
zahl:=zahl+IdIcmpClient1.ReplyStatus.MsRoundTriptime;
end;

ergebnis:=zahl-firsttime;//diese Codezeile löschen
ShowMessage(FloatToStr(ergebnis/5));


Du ziehst zwar firsttime von Zahl ab, aber du hast es davor nie hinzuaddiert, also entweder addierst du irgendwo zu Zahl noch firsttime oder du subtrahierst es einfach nicht.
sabi_14 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40



BeitragVerfasst: Di 06.05.08 10:12 
Hey,
Danke viel mal.
Es funktioniert.
Das habe ich einfach nicht bemerkt.

Grüsse
Sabi