Autor Beitrag
Stecky2000
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 51



BeitragVerfasst: Mi 10.12.08 11:52 
Hi Ihr Buben,

ich schreibe mit meiner Anwendung auf einem entfernten Server-Verzeichnis Logs.
Damit das ganze nicht überhand nimmt, prüfe ich beim Systemstart mittels Findfirst, ob sich in dem entsprechenden Server-Verzeichnis Dateien mit der Endung .txt befinden die älter als 10 Tage sind und wenn ja lösche ich die.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
var 
srSearch: TSearchRec;
Suchstr: String;
sSearchPath: String;
V_FileDatum:TDateTime;
V_HeuteDatumMinus10:TDateTime;

begin
Suchstr := '\\10.16.150.19\Anwendung\PC_LOG\';
try
  sSearchPath := Suchstr + '*.txt';
  if FindFirst(sSearchPath, faAnyFile, srSearch) = 0 then
     begin
        repeat
            if (srSearch.Name <> '.'and (srSearch.Name <> '..'then
              begin
                 V_FileDatum := DateiDatum(Suchstr + srSearch.Name);
                 V_HeuteDatumMinus10 := (Date - 10);
                 if V_FileDatum < V_HeuteDatumMinus10 then
                 DeleteFile(Suchstr + srSearch.Name);
              end;
        until
          (FindNext(srSearch) <> 0);
          FindClose(srSearch);
        end;
finally
end;
end;


Scheinbar gibt es bei uns z. T. Probleme beim Zugriff im Netz, was dann dazu führt, dass die Anwendung in der Zeile

ausblenden Delphi-Quelltext
1:
if FindFirst(sSearchPath, faAnyFile, srSearch) = 0 then					


hängen bleibt.

Da ich diesen Check beim Systemstart also im OnCreate ausführe, führt das dann dazu, dass das Formular nicht angezeigt wird und im Taskmanager hängt. Ich kann das dann irgendwann dort abschiessen und die Anwendung neu starten, dann gehts.

Hat jemand einen Tipp wie ich das abfangen kann?
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 10.12.08 11:58 
Erste Idee:
vorher mit nem Ping prüfen, ob der Rechner verfügbar ist.

Und ich denke mal, dass die Anwendung nicht ewig hängen bleibt, sondern nur auf einen Timeout wartet.. wenn man mit dem Explorer auf einen Rechner zugreifen will, den es nicht gibt, dauert das ja auch ewig, bis eine Fehlermeldung erscheint.

_________________
PROGRAMMER: A device for converting coffee into software.
Stecky2000 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 51



BeitragVerfasst: Mi 10.12.08 12:53 
Ich glaube, so einfach ist es nicht.
Wenn ich händig pinge, im cmd Fenster, dann erkenne ich da keine Probleme.
Ich merke jedoch, wenn ich mit dem Explorer auf das Server-verzeichnis (Netzlaufwerk) zugreifen will,
dass es ab un zu ewig dauert, bis ich die Anzeige bekomme.

Das scheint bei meiner Anwendung aber stärker ausgeprägt sein, denn ich habe bisher den Eindruck gehabt, dass wenn sie da mal hängen bleibt, nur noch mit Taskmanager zu killen ist, sprich sie läuft nicht nach einem Timeout weiter.

Ich werde das aber noch mal checken.



EDIT:

Also, Komando zurück. Eben hatte ich es wieder. Anwendung aufgerufen, Maske erscheint nicht, Sanduhr ist da.
Explorer geöffnet und auf das Netzlaufwerk zugegriffen, keine Verbindung zu sehen.

Nach ca. 30 sek. ist meine Anwendung/Maske dann doch erschienen.
Im Explorer hat es dann noch ca. weitere 10 sek. gedauert bis ich den Baum gesehen habe.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 10.12.08 13:27 
Mach das doch einfach in einem Thread. Da du mit dem Rest deiner Anwendung auf die alten Logs ohnehin nicht zugreifst (nehme ich mal an), muss das ja nicht einmal synchronisiert werden. Der Thread kann dann laufen wie lange er will und ist irgendwann fertig.
Stecky2000 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 51



BeitragVerfasst: Mi 10.12.08 16:32 
Ja, an einen eigenen Thread habe ich auch schon gedacht....

Das ganze hat nur den Haken, dass ich nur Hobby-möchtegern-Programmierer bin und Thread nur als Begriff kenne, mich aber noch nie damit befasst habe.

Nun ja, ich schaue mal, ob ich damit zurecht komme.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 10.12.08 16:49 
Das ist nicht schwer, da du keine Synchronisation brauchst, sondern der Thread einfach nur laufen und etwas machen soll. Erstelle einfach mal über Datei --> Neu --> Andere --> Delphi Dateien --> Thread Objekt einen neuen Thread. Der Klassenname ist ein beliebiger Name, wie deine Klasse heißen soll. TDeleteThread zum Beispiel.

Dann musst du dort in Execute deinen Code packen und in FormCreate oder so deinen Thread erzeugen.
ausblenden Delphi-Quelltext
1:
TDeleteThread.Create(False);					
Wenn du dazu in Execute FreeOnTerminate auf True setzt, dann war es das schon.

Weitere Infos gibts zum Beispiel hier:
www.delphi-treff.de/...bjectpascal/threads/
Stecky2000 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 51



BeitragVerfasst: Do 11.12.08 18:10 
Ja Danke, werde ich versuchen und Rückmeldung geben.

Zur Zeit komme ich nicht dazu, mein Sohn nervt, ich soll mit ihm spielen.

Am Wochenende klappts bestimmt, bin schon neugierig.