Hi,
erstmal Code:
Delphi-Quellcode:
procedure Tfmain.UsersGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType;
var CellText: WideString);
var
Data: PUserData;
Pinger: TPinger;
begin
Data := Users.GetNodeData(Node);
case Column
of
0: CellText := Data^.FName;
1: CellText := '
';
2: CellText := '
';
3:
begin
Pinger := TPinger.Create(true);
Pinger.Priority := tpTimeCritical;
Pinger.IP := Data^.FIP;
Pinger.Resume;
CellText := IntToStr(Time);
end;
end;
end;
{Unit uping}
procedure TPinger.Execute;
var
Start, Ende: Int64;
begin
inherited;
Start := GetTickCount;
Ping(
IP);
Ende := GetTickCount - Start;
aReply := Ende;
Synchronize(UpdateTime);
Terminate;
end;
function TPinger.Ping(InetAddress:
string): boolean;
var
Handle: THandle;
InAddr: IPAddr;
DW: DWORD;
rep:
array[1..128]
of byte;
begin
result := false;
Handle := IcmpCreateFile;
if Handle = INVALID_HANDLE_VALUE
then
Exit;
TranslateStringToTInAddr(InetAddress, InAddr);
DW := IcmpSendEcho(
Handle, InAddr,
nil, 0,
nil, @rep, 128, 0);
Result := (DW <> 0);
IcmpCloseHandle(
Handle);
end;
procedure TPinger.UpdateTime;
begin
Time := aReply;
end;
Wie man sieht, führe ich einen Ping aus. Ich bekomme auch die Zeit zurück. Nur, kann ich sicher sein, das der Ping stimmt? Das Programm läuft ja weiter während der Thread pingt. Kann es zu verfälschten Daten kommen. Oder läuft das Hauptprogramm nicht weiter, weil der Thread mit höchster Priorität läuft?