Einzelnen Beitrag anzeigen

Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#1

erster versuch mit threads

  Alt 30. Apr 2005, 23:51
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?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat