Einzelnen Beitrag anzeigen

Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#8

AW: TDirMonitor / ReadDirectoryChanges

  Alt 23. Mai 2017, 13:42
Ich wollte kein neues Thema aufmachen und deshalb frage ich trotz des Alters von 5 Jahren mal hier nach:

TDirMonitor von JUAN CARLOS MOLINOS MESA funktioniert bei mir (XE5) so lange, bis ich versuche es zu deaktivieren. Dann stürzt das Programm vom BS her (Win10 Pro) ab und ich sehe auch im Debugger nicht, woran es liegt. Außerdem benötige ich die Funktionalität für ein Konsolen-Programm und habe daher u.a. Probleme mit der Ableitung von TComponent.
Langer Rede kurzer Sinn: ich möchte es gern verstehen und nachbauen.

Wenn ich das richtig deute, findet die eigentliche Arbeit in dem Thread (ProcessMonitor.pas ) statt?
In RDCWDirMonitor.pas wird "nur" vorab geprüft, ob man das 1. Handle für das Verzeichnis, 2. einen I/O-Port für dieses Verzeichnishandle erzeugen und man 3. ReadDirectoryChanges(); überhaupt ausführen kann - erst dann wird der Thread erzeugt.
Im Thread wiederum lauert man mit GetQueuedCompletionStatus(); darauf, dass sich etwas geändert hat und liest es dann ebenfalls mit ReadDirectoryChanges(); aus und feuert das Ereignis.

Habe ich das so richtig verstanden?

GetQueuedCompletionStatus(); habe ich auch als Verursacher für den Absturz im Verdacht. Das scheint selbst blockierend zu sein und damit kommtif self.Terminated then quit:=true nicht mehr zum Zuge - er wartet sich tot.
Ich würde mich freuen, wenn sich trotz der langen Zeit mal jemand dazu äußern könnte, damit ich umbauen kann. Hilfreich wäre es wohl allemal wegen, um meine Probleme mit dem Absturz zu klären.
Alex Winzer
  Mit Zitat antworten Zitat