Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Zugriff auf CD-Rom ohne CD - Timeout? (https://www.delphipraxis.net/206703-zugriff-auf-cd-rom-ohne-cd-timeout.html)

MicMic 20. Jan 2021 21:16

Zugriff auf CD-Rom ohne CD - Timeout?
 
Hallo,

ein komisches Verhalten. Ich hatte auf mein CD-Laufwerk "GetVolumeInformation" und "FindFirstFile" draufgeschossen. Es hatte dann gefühlte 30-40 Sekunden gedauert (gezählt habe ich nicht) bis der Fehler-Code kam (Fehler-Code nur auf FindFirstFile getestet). Deswegen suchte ich gerade im Internet, ob es da was passendes gibt. Da gibt es auch was (Prüfung ob eine CD eingelegt ist - mit Windows-Botschaft) aber nun dauerts doch nicht mehr so lange. Eigentlich nur noch ca. 1 Sekunde lang. Dies auch ein paar mal getestet und CD-Laufwerk erneut angesteckt (USB). Aber jetzt ist der Timeout immer so ca. 1 Sekunde lang. So ist es ja in Ordnung aber warum war es zuvor mal 30-40 Sekunden lang?

Jemand eine Idee?

Mike

himitsu 21. Jan 2021 00:14

AW: Zugriff auf CD-Rom ohne CD - Timeout?
 
Für den Zugriff auf den Dateiinhalt gibt es asynchrone Methoden.
Beim Verzeichnisinhalt ist das bissl ungünstiger gelöst.



Ganz im Ernst, erspar dir den Ärger, irgendwas Windiges zum Laufen zu bekommen, und abeite stattdessen in einem Thread.

Moombas 21. Jan 2021 09:14

AW: Zugriff auf CD-Rom ohne CD - Timeout?
 
Kann es sein das er das Laufwerk erst installieren musste, da du hier ein USB-Device hast?

samso 21. Jan 2021 09:35

AW: Zugriff auf CD-Rom ohne CD - Timeout?
 
Probiere mal vor dem Abrufen der Verzeichnisliste die folgende Funktion zu verwenden:

Delphi-Quellcode:
function DiskInDrive(const Path: String): Boolean;
// mit z.B. Path = 'd:\'
var
  ErrorMode: word;
  FreeAvailable: Int64;
  TotalSpace: Int64;
begin
  ErrorMode := SetErrorMode(SEM_FailCriticalErrors);
  try
    Result := GetDiskFreeSpaceEx(PChar(Slash(Path)), FreeAvailable, TotalSpace, nil);
  finally
    SetErrorMode(ErrorMode);
  end;
end;

MicMic 21. Jan 2021 11:09

AW: Zugriff auf CD-Rom ohne CD - Timeout?
 
Danke für die Hilfestellung an Alle.
Habe auch schon ein Beispiel gefunden (für ein Thread) wo es gezeigt wird, wie dort mit GetVolumeInformation gearbeitet wird um man sozusagen einen eigenen Timeout hat.

Threads benutze ich schon um zur Dateiliste weitere Informationen nachzuladen. Das war meine erste Begegnung mit den Threads und bis es richtig funktionierte (mit dem restlichen Source), hat es recht lange gedauert. Immer wieder optimiert/ausgebessert usw.

FindFirst/Next im Thread zu verlagern, wird wohl schwer werden. Eigentlich funktioniert das ganze sehr gut. Habe 137000 Dummyfiles (verschiedene Endungen) in einem Ordner und es geht recht schnell. Schon die ganze Zeit sehr zufrieden und wollte es eigentlich so lassen. Heute das erste mal ein anderes Verhalten gesehen. Es dauert und dauert und dauert in diesem Ordner. Zum Beispiel auch bei dem Total Commander. Der war hier auch schon schneller und hat hier jetzt ein Schneckentempo eingelegt. Den Übertäter habe ich bei mir gefunden. In meiner Repeat-Until Schleife für FindFirst/Next nutze ich auch "Application.ProcessMessages". Das war nie ein Problem aber irgendwie reagiert Windows hier jetzt anders darauf. Könnte vielleicht bei einem Neustart wieder anders sein. Jedenfalls habe ich mich dazu entschlossen, die ganze Dateiliste immer erst einzulesen, bevor sie angezeigt wird. Einfach wegen dem Sortierproblem. Der Windows Explorer macht das ja anders und je nach Sortier-Reihenfolge sieht man hier die Liste Karussell fahren. Anders geht es ja nicht, weil man eine Dateiliste beim einlesen (welche Funktionen auch immer) nicht auf eine Eigenschaft vor sortieren kann. Aber in einem Thread hat man natürlich mehrere Optionen die man letztendlich dazu programmieren kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:29 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