AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Zugriff auf CD-Rom ohne CD - Timeout?
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff auf CD-Rom ohne CD - Timeout?

Ein Thema von MicMic · begonnen am 20. Jan 2021 · letzter Beitrag vom 21. Jan 2021
Antwort Antwort
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Zugriff auf CD-Rom ohne CD - Timeout?

  Alt 20. Jan 2021, 22:16
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.048 Beiträge
 
Delphi 12 Athens
 
#2

AW: Zugriff auf CD-Rom ohne CD - Timeout?

  Alt 21. Jan 2021, 01:14
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Zugriff auf CD-Rom ohne CD - Timeout?

  Alt 21. Jan 2021, 10:14
Kann es sein das er das Laufwerk erst installieren musste, da du hier ein USB-Device hast?
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#4

AW: Zugriff auf CD-Rom ohne CD - Timeout?

  Alt 21. Jan 2021, 10:35
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;
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: Zugriff auf CD-Rom ohne CD - Timeout?

  Alt 21. Jan 2021, 12:09
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.
  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 10:43 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