Habe soeben versucht, meinen ersten thread auf die beine zu stellen. der zweck dieses threads ist es, eine evtl. große zahl von dateinamen einzulesen uind zu manipulieren.
ich habe einfach mal "neues theread objekt" gemacht und alles, was mir relevant erschien, aus der erstellten
unit in meine hauptunit kopiert (erster fehler ?!)
dann habe ich einige globale variablen gemacht, auf die der thread zugreifen darf (zweiter fehler?!)
und nun bekomme ich eine
AV an adresse 00000000
ich zeig euch mal n bisschen code, nur um zu fragen, ob das denn so überhaupt funktionieren kann......
Delphi-Quellcode:
type
TCheckThread = class(TThread)
private
{ Private-Deklarationen }
protected
procedure Execute; override;
end;
var
MainForm: TMainForm;
pop:boolean = false;
Check: TStringList;
Checked:TStringList;
CheckBlocked:boolean=true;
CheckThread:TCheckThread;
ToLower:boolean=true;
implementation
{$R *.dfm}
procedure TCheckThread.Execute;
var bad,good:TStringList;
i,k,count:integer;
smallcheck:string;
flags:TReplaceFlags;
result:TStringList;
begin
{ Thread-Code hier einfügen }
flags:=[rfReplaceAll];
if not checkblocked then
begin
result:=TStringList.Create;
checkblocked:=true;
routines2.explode(check[0],'|',bad); //search-ausdrücke extrahieren
routines2.explode(check[1],'|',good); //replace-ausdrücke extrahieren
//...
//unkritischer code(hoffe ich)
//...
mainform.MProtocol.Lines.Add('Check durchgeführt. Unterschiede: '
+ inttostr(strcomp(result.gettext,check.GetText)));
end
else mainform.MProtocol.Lines.Add('thread abgebrochen. Kein Zugriff auf Checkliste');
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
checkthread:=tcheckthread.Create(true);
checkthread.FreeOnTerminate := true;
Check:=TStringList.Create;
Checkblocked:=false;
end;
procedure TMainForm.BSingleOpenClick(Sender: TObject);
begin
check.Assign(readdir(stv1));
check.Insert(0,'ä| '); //bad
check.Insert(0,'ae|_'); //good
checkthread.Execute;
end;
hoffe, der code reicht.
wird durch aufrufen der execute-methode denn überhaupt der thread ausgeführt, oder nur innerhalb des hauptthreads ausgeführt?