hallo,
wieder mal eine threadfrage...
mittels klick in eine listbox soll ein ausgelagerter thread gestartet werden, welcher eine datei prüft ob online und wertet diese dann aus...
den thread habe ich dem grunde nach bereits aufgebaut und es läuft auch soweit.
nur möchte ich einen womöglichen bestehenden Thread der
evtl. noch läuft bei klick in die listbox abbrechen und erneut den thread starten. (Meine cpu auslastung steigt bei jedem klick in die listbox um 0,3%)
Es sollten keine "parallele" threads laufen; nur sofern einer vorhanden ist diesen beenden und einen neuen starten.
im onclick des buttons auf der form:
Delphi-Quellcode:
...
procedure TFormSuche.ListBoxBearbeiterClick(Sender: TObject);
var
...
begin
...
Thread_PictureSearch := TThread_PictureSearch.Create(True);
Thread_PictureSearch.FreeOnTerminate := False;
Thread_PictureSearch.Bildname := ImgName;
Thread_PictureSearch.ApplicationTitle := Application.Title;
Thread_PictureSearch.Resume;
...
end;
meine thread
unit:
Delphi-Quellcode:
unit UnitVTBSuche_Thread_PictureSearch;
interface
uses
classes, Windows, System.SysUtils, WinInet;
type
TThread_PictureSearch =
class(TThread)
private
ThreadStatus : Integer;
ThreadBildname :
String;
ThreadApplicationTitle :
String;
procedure Sync_Ende;
public
property Status: Integer
read ThreadStatus
write ThreadStatus;
property Bildname:
String read ThreadBildname
write ThreadBildname;
property ApplicationTitle:
String read ThreadApplicationTitle
write ThreadApplicationTitle;
protected
procedure Execute;
override;
end;
implementation
uses UnitSuche;
procedure TThread_PictureSearch.Execute;
var
ImgExist : Boolean;
ImgName :
String;
begin
while not Terminated
do
begin
try
Status := 1;
// Hier sind die funktionen
Status := 2;
Synchronize(Sync_Ende);
except
on e:
exception do
begin
end;
end;
Status := 0;
Terminate;
end;
end;
procedure TThread_PictureSearch.Sync_Ende;
begin
FormSuche.groupSuchergebnis.caption := '
TEEEEEEEEEEEEEEEST';
FormSuche.wb.Hint := '
1';
FormSuche.wb.Navigate2(Bildname);
end;
end.