![]() |
Thread: Kann ich sicher sein, das die Daten stimmen?
Hi,
erstmal Code:
Delphi-Quellcode:
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?
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; |
Re: Thread: Kann ich sicher sein, das die Daten stimmen?
Hi,
ok, es sind falsche Daten. Kann ich nicht irgendwie auf den Thread warten?
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; // Hier auf den Thread warten, bis er durch ist. CellText := IntToStr(Time); end; end; end; |
Re: Thread: Kann ich sicher sein, das die Daten stimmen?
Wenn du an dieser Stelle auf den Thread warten willst, warum machst du das denn in ein Thread? :?:
Kannst ja den Thread mit Execute "ausführen", was aber nicht der Sinn von Threads ist... P.S.: Noch eine Möglichkeit ist einfach mal "Pinger.WaitFor" vom MainThread aus aus zu führen... |
Re: Thread: Kann ich sicher sein, das die Daten stimmen?
Hi,
ich glaube das WaitFor ist genau das, was ich gesucht habe. Danke :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz