AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi IcmpSendEcho unterbricht mein Programm?
Thema durchsuchen
Ansicht
Themen-Optionen

IcmpSendEcho unterbricht mein Programm?

Ein Thema von alfold · begonnen am 8. Apr 2016 · letzter Beitrag vom 10. Apr 2016
Antwort Antwort
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#1

IcmpSendEcho unterbricht mein Programm?

  Alt 8. Apr 2016, 12:42
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!?

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
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#2

AW: IcmpSendEcho unterbricht mein Programm?

  Alt 8. Apr 2016, 12:57
Dabei ist es egal ob das im Timer, oder als Thread ausgeführt wird.
Ich vermute, hier liegt der Knackpunkt.

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.
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: IcmpSendEcho unterbricht mein Programm?

  Alt 8. Apr 2016, 13:16
Ich hoffe es wird nicht peinlich.
im Main
Delphi-Quellcode:
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;
und hier der Thread
Delphi-Quellcode:
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.
Schaun wir mal wo ich mist gebaut habe!

Gruß alfold
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#4

AW: IcmpSendEcho unterbricht mein Programm?

  Alt 8. Apr 2016, 18:31
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 )
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#5

AW: IcmpSendEcho unterbricht mein Programm?

  Alt 9. Apr 2016, 07:27
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.
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: IcmpSendEcho unterbricht mein Programm?

  Alt 9. Apr 2016, 09:00
Dieses tpTimeCritical ist hier eher schädlich, da jetzt dieser Thread bevorzugt vor allen anderen behandelt wird und somit Auswirkungen auf den Rest haben kann.

Dabei muss der doch nur warten ... zeitkritisch ist das auf keinen Fall.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: IcmpSendEcho unterbricht mein Programm?

  Alt 10. Apr 2016, 09:21
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.

Dieses tpTimeCritical ist hier eher schädlich... .
Kommt halt von c+p. Ist noch von meinem FTP Thread
...Nur eine Stilfrage.... .
hab ich geändert
...
(Ansonsten ist es bestimmt das fehlende T bei UpdateStatus )
Auch im Thread können Staus entstehen



Also noch mal Danke an alle
Gruß alfold

Geändert von alfold (10. Apr 2016 um 09:26 Uhr)
  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 03:33 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