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.