Einzelnen Beitrag anzeigen

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