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
 
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
 


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 21:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz