nach etwas Zeit, melde ich mich (leider) mal wieder,
ich schreibe derzeit eine Anwendung, die einen Thread benötigt, um längere JSON-Aktionen auszuführen,
da dieser Thread zwischendurch ein paar Dateien benötigt und ich ohnehin schon eine Thread-Klasse zum Download von Dateien habe, habe ich diese natürlich
auch im Thread1 genutzt.
Wir haben im Prinzip also:
Hauptthread --(startet)--> Subthread [Subthread1] --(startet)--> Subthread [Subthread2]
Soweit klappt das alles auch ganz gut.
Allerdings soll der Subthread-1 eine Variable schreiben, in der die derzeitige Aktion (als String) steht.
Klappt auch... erstmal.
Denn, wenn der Thread1 seine Variable aus dem eigenen Aktionsstring und dem des Subthreads 2 zusammenstellt, wird eine SIGSEGV-Exception im Hauptthread geworfen.
Codebeispiel:
Code: Alles auswählen
procedure TMyThread.Execute;
...
DThread := TDownLoadThread.Create(True); //Start pausiert, damit wir noch werte setzen können.
DThread.URL := URL;
DThread.Destination := Path;
DThread.Start;
while (DThread.HasTerminated=False) and (not Terminated) do begin
tempStr := DThread.Downloadstatus; //Downloadstatus auslesen
//[DownloadStatus ist eine Property mit ": String read pDownloadStatus;" (dieser wird vom Thread gesetzt)]
pStatus := ('Retreving Index : '+tempStr+'%'); //Aktuellen Threadstatus zusammensetzen | Debugger markiert diese Zeile
end;
...
end;
Code: Alles auswählen
procedure Tfm_Launcher.Button1Click(Sender: TObject);
var
StartThread : TMyThread;
begin
StartThread:=TMyThread.Create(True);
StartThread.Start;
while StartThread.HasTerminated=False do begin
Label_status.caption:= StartThread.Status; //Status ist eine Property mit ": String read pStatus;"
Update;
end;
end;
damit ich ihn nicht später nochmal mache

Ich hoffe, ihr versteht, was ich versuche zu tun

MfG
mark332