AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi IcmpClient im Thread
Thema durchsuchen
Ansicht
Themen-Optionen

IcmpClient im Thread

Ein Thema von Andru · begonnen am 15. Jan 2007
Antwort Antwort
Andru

Registriert seit: 1. Feb 2006
Ort: Salzgitter
24 Beiträge
 
Delphi 6 Enterprise
 
#1

IcmpClient im Thread

  Alt 15. Jan 2007, 16:38
Aloha,

ich hoffe ihr könnt mir bei meinen Problemen helf. Verstehe wirklich nicht, warum das solche Macken macht.
Sind meine ersten versuche mit Threads und möchte da jede Sekunde einen Ping abschicken.
Allerdings so, dass die weitere Arbeit nicht blockiert - daher der Thread.
Wollte mir eigentlich ne Timer-Komonente im Thread erstellen, komme aber nicht ins OnTimer-Ereignis.
Also kenne das nur auf einem Form, dass man sagen muss 'Enabled := true' und schon läuft er. Aber
der Thread beendet sich dann bei mir.

Das Problem konnt ich zwar erstma umgehen, aber habe das nur gemacht, um den Thread am Leben zuhalten.

Das größere Problem ist eigentlich, dass ich die Indy-Komponente IdIcmpClient nicht wirklich erzeugen kann.
Ich kann alles kompilieren, bekomme aber denn eine Access-Violation...

Kann mir jemand sagen warum?

Danke im Vorraus!

Gruß,

Andru

Delphi-Quellcode:
unit uPingSensor;

interface

uses
  Classes, ExtCtrls, IdIcmpClient, fSettings, SysUtils, server_implementation;

type
  PingSensor = class(TThread)
  private
    { Private declarations }
    procedure initPing;
    procedure getInit;
    procedure PingTimerTimer(Sender:TObject);
    procedure IdIcmpClient1Reply(ASender: TComponent;
    const AReplyStatus: TReplyStatus);
    procedure UpdatePing;
  protected
    procedure Execute; override;

  end;

implementation

var
  PingTimer: TTimer;
  IdImcpClient1: TIdIcmpClient;
  pingHost: String;
  pingPort: Integer;
  SensorExists: Boolean;


{ PingSensor }

procedure PingSensor.Execute;
begin
  Synchronize(getInit);
  initPing;

  while not Terminated do
    begin
    PingTimerTimer(self);
    sleep(1000);
    end;
end;

procedure PingSensor.getInit;
begin
  pingHost := server_implementation.configIP;
  pingPort := server_implementation.configPort;
end;

procedure PingSensor.initPing;
begin
  try
{    IdImcpClient1 := IdImcpClient1.Create(nil);  //An dieser Stelle knallt es immer...
    with IdImcpClient1 do
      begin
        Host := pingHost;
        Port := pingPort;
        ReceiveTimeout := 1500;
        OnReply := IdIcmpClient1Reply;
      end;
}
  except
      PingTimer := TTimer.Create(nil);
      PingTimer.OnTimer := PingTimerTimer;
      PingTimer.Interval := 1000;
      PingTimer.Enabled := true;
  end;
end;

procedure PingSensor.PingTimerTimer(Sender:TObject);
begin
  try
    IdImcpClient1.Ping
  finally
    Synchronize(UpdatePing);
    Execute;
end;

end;

procedure PingSensor.IdIcmpClient1Reply(ASender: TComponent;
  const AReplyStatus: TReplyStatus);
begin
  SensorExists := AReplyStatus.ReplyStatusType = rsEcho;
end;

procedure PingSensor.UpdatePing;
begin
  fsettings.SExists := SensorExists;
end;


end.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz