AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ReadDirectoryChangesW beenden

Ein Thema von sportkeks · begonnen am 13. Okt 2011 · letzter Beitrag vom 21. Okt 2011
Antwort Antwort
sportkeks

Registriert seit: 29. Apr 2009
73 Beiträge
 
#1

ReadDirectoryChangesW beenden

  Alt 13. Okt 2011, 10:52
Hallo DP.
Ich habe ein Problem mit ReadDirectoryChangesW.
Ich habe hier eine Komponente gefunden die wunderbar funktioniert allerdings lässt sie sich nicht korrekt beenden das Programm bleibt einfach nur hängen.
Ich habe es genauso gemacht wie es "Ganymed" in dem Thread auch beschieben hat und bekomme die gleichen Probleme

Please Help

Ps. Ich benutze Turbo Delphi und an sich brauche ich auch nur ein Event das sagt das sich etwas geändert hat die Änderung im spezielllen ist nicht wichtig.

Gruß
Sportkeks
Now we're taking a break to eat some cake.
  Mit Zitat antworten Zitat
sportkeks

Registriert seit: 29. Apr 2009
73 Beiträge
 
#2

AW: ReadDirectoryChangesW beenden

  Alt 18. Okt 2011, 19:51
Und push
Now we're taking a break to eat some cake.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: ReadDirectoryChangesW beenden

  Alt 18. Okt 2011, 22:13
Teilst du diesem Thread auch mit, daß er sich beenden soll, bzw. wie/wo gibst du die Thread-Instanz frei?
$2B or not $2B
  Mit Zitat antworten Zitat
sportkeks

Registriert seit: 29. Apr 2009
73 Beiträge
 
#4

AW: ReadDirectoryChangesW beenden

  Alt 21. Okt 2011, 19:15
Die Thread Instanz wird in der Komponente frei gegeben sobalt TFldrControl.StopThread aufgerufen wird. Das ganze sieht dann bei mir so aus:

Delphi-Quellcode:
  oFolderControler:TFldrControl;


procedure TForm1.Change(Folder: String; Action: Integer);
begin
  Memo1.Lines.Add(Folder+' '+inttostr(Action));
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  oFolderControler.StopThread;
  oFolderControler.Free;
  inherited;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  oFolderControler := TFldrControl.Create(Owner);
  oFolderControler.Folder := 'D:\Test';
  oFolderControler.OnGetResult := change;
  oFolderControler.StartThread;
end;
Beim stoppen tritt eine Zugiffsverletzung auf:

Delphi-Quellcode:
destructor CtrlThread.Destroy;
begin // diverse Handles freigeben
  try
    if FhFile <> INVALID_HANDLE_VALUE then CloseHandle(FhFile);
       CloseHandle(FileEvent); <---------------------- hier kommt ein exception
    TermEvent.Free;
    SuspEvent.Free;
  except
  end;
end;
Kann das jemand anders vllt mal testen, oder kann mir jemand sagen wie ich einen Thread der bei "ReadDirectoryChangesW(...)" auf eine antwort wartet, also bis eine Datei verändert wird, "weiter laufen" lassen kann ohne das eine Datei verändert wird ?

Hier ein Beispiel:

Delphi-Quellcode:
    while not terminated do begin
      if ReadDirectoryChangesW(FhFile,pBuf,dwBufLen,true, <------- |Der Thread wartet hier solange
                                FILE_NOTIFY_CHANGE_FILE_NAME or ---|bis eine Datei geändert wird egal
                                FILE_NOTIFY_CHANGE_DIR_NAME or ----|ob man ihn terminiert, er bleibt
                                FILE_NOTIFY_CHANGE_LAST_WRITE, ----|hier stehen....
                                @dwRead,nil,nil) then
      begin
        Synchronize(proc);
      end
      else
      begin
        break;
      end;
    end;
Ich hoffe Ihr wisst was ich meine
Now we're taking a break to eat some cake.

Geändert von sportkeks (21. Okt 2011 um 19:18 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 09:53 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