![]() |
IcmpSendEcho unterbricht mein Programm?
Ich teste gerade IcmpSendEcho. Dabei stelle ich fest das beim ausführen es zu kurze Unterbrechungen im Programmablauf kommt!
Dabei ist es egal ob das im Timer, oder als Thread ausgeführt wird. Besonders bemerkbar bei Musik Wiedergabe!(Ich verwende die Bass.dll von Un4seen) Der Ping wird nur im Lan benutzt, nicht fürs Inet!!!! Die Audiodateien befinden sich auch im Lan. Die Abfrage erfolgt jede Sekunde. Die wartezeit beträgt 500ms. Ist aber unabhängig davon, habe ich festgestellt! Gehe ich da eventuell richtig in der Anahme, das bei der Anfrage an den "Server" und bei der Rückmeldung, IcmpSendEcho das Programm für den kurzen Moment unterbricht!? :gruebel: Anmerkung: Beim Transfer von grossen Daten vom PC zum "Server" oder zurück, unabhängig von IcmpSendEcho, gibt es keine aussetzer. Also sehr Merkwürdiges verhalten von IcmpSendEcho! Gruß alfold |
AW: IcmpSendEcho unterbricht mein Programm?
Zitat:
IcmpSendEcho kehrt erst zurück, wenn eine Antwort oder eine Timeout eingetreten ist. Folglich wird also natürlich der jeweilige Thread des laufenden Programms unterbrochen, bis dieser Fall eingetreten ist. Ein Timer gehört zum Hauptthread und unterbricht somit auch die GUI. Solltest du allerdings einen eigenen Thread für den Ping verwenden, so wird nur dieser unterbrochen und alle anderen Threads des Programms laufen wie gehabt weiter. Ist das bei dir nicht der Fall, gehe ich stark davon aus, dass du einen Fehler in der Threadimplementierung hast. |
AW: IcmpSendEcho unterbricht mein Programm?
Ich hoffe es wird nicht peinlich. :roll:
im Main
Delphi-Quellcode:
und hier der Thread
if UncPath <> '' then
begin tmpPath:= ExtractFileName(ExtractFiledir(ExtractFiledir(ExcludeTrailingPathDelimiter(UncPath)))); if tmpPath <> '' then begin PingThread:= TPingThread.Create(tmpPath); PingHndl:= PingThread.Handle; PingThread.FreeOnTerminate := False; PingThread.Resume; end; end;
Delphi-Quellcode:
Schaun wir mal wo ich mist gebaut habe!
unit PingThread;
interface uses Windows, Classes, SysUtils, PingTest; type TPingThread = class(TThread) private afHostName: string; aPing: Boolean; procedure UpdateStaus; procedure Finished; procedure Abort; protected procedure Execute; override; procedure GetPing(); public constructor Create(FHostname: string); end; implementation uses MxMain; constructor TPingThread.Create(fHostname: string); begin inherited create(False); priority:= tpTimeCritical; FreeonTerminate:= False; afHostName:= FHostname; end; procedure TPingThread.Abort; begin MxPlayer.Abort; end; procedure TPingThread.Execute; begin while not Terminated do begin GetPing(); Sleep(1000); end; end; procedure TPingThread.Finished; begin MxPlayer.Finished; end; procedure TPingThread.UpdateStaus; begin if self.Terminated then begin Synchronize(Abort); Exit; end; MxPlayer.UpdateStatus(aPing); end; procedure TPingThread.GetPing(); begin if Self.Terminated then begin Synchronize(Abort); Exit; end; aPing:= Ping(afHostName); Synchronize(UpdateStaus); end; end. Gruß alfold |
AW: IcmpSendEcho unterbricht mein Programm?
Mh, du startest mit create(false) (also nicht suspended) und rufst trotzdem Resume auf.
Weiß aber nicht ob es daran liegt. (Ansonsten ist es bestimmt das fehlende T bei UpdateStatus :stupid: ) |
AW: IcmpSendEcho unterbricht mein Programm?
Die Notwendigkeit von priority:= tpTimeCritical; erschliesst sich mir nicht, daher würde ich es eliminieren.
Nur eine Stilfrage, aber den MxPlayer würde ich nicht aus dem Thread, ansprechen sondern nur eine Callback-Funktion verwenden, die der Thread mit dem Ping-Ergebnis aufrufen darf. |
AW: IcmpSendEcho unterbricht mein Programm?
Dieses
Delphi-Quellcode:
ist hier eher schädlich, da jetzt dieser Thread bevorzugt vor allen anderen behandelt wird und somit Auswirkungen auf den Rest haben kann.
tpTimeCritical
Dabei muss der doch nur warten ... zeitkritisch ist das auf keinen Fall. |
AW: IcmpSendEcho unterbricht mein Programm?
THX an alle
Ursache für die Aussetzer ist die IDE. Warum auch immer! Da Sitzt man Tagelang dran um die Ursache zu beseitigen, ruft hier um Hilfe und stellt dann fest, Ohne IDE gibt es keine Aussetzer. Zitat:
Zitat:
Zitat:
Also noch mal Danke an alle Gruß alfold |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22: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