Hm. Ein Beispiel kenne ich jetzt nicht, aber
das müsste schon helfen.
Im Grunde ist es ganz einfach. Du leitest dir eine eigene Klasse von TThread ab und überschreibst dabei die Execute-Methode. In dieser wird dein eigener Code ausgeführt, dort kannst du dann z.B. den Ping absetzen. Erstellen tust du den Thread dann z.B. so:
Delphi-Quellcode:
var
T: TMeinThread;
begin
T := TMeinThread.Create(True); //Thread angehalten erstellen
T.FreeOnTerminate := True; //Freigeben wenn Execute-Methode fertig
T.Resume; //Thread starten
end;
Was meiner Meinung nach manchmal etwas nervig, kompliziert oder fehleranfällig ist, ist das Weiterleiten von Informationen des Threads an den Main-Thread, bzw.
VCL-Sachen/Fenster. Behalte dabei immer im Hinterkopf, dass du aus der Execute-Methode, bzw. Methoden, die von Execute aus aufgerufen werden, nichts mit der
VCL machen darfst. D.h. wenn dein Thread beispielsweise den Text eines Labels ändern will oder in ein TListView ein TListItem hinzufügen möchte, muss das über die Synchronize()-Methode des Threads oder andere Mechanismen wie SendMessage oder PostMessage passieren. Das gilt auch für hässliche globale/gemeinsame Variablen, sofern die benutzt werden - der Zugriff darauf sollte immer nur von einem Thread aus gleichzeitig erfolgen, also eventuell noch über CriticalSections informieren, das könnte auch hilfreich sein.
Viel Erfolg