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.