Hab noch nie mit Threads gearbeitet, deshalb auch noch mal ein paar Fragen mehr zum Verständnis.
Gut, das hat mir schon ein ganzes Stück weiter geholfen. Ich habe nun die Bestehende Klasse, so wie sie bisher alleine lief in einen Thread gepackt, mittlerweile gibt es auch keine CompilerFehler mehr.
In myThread.Execute packe ich dann die Funktion, die die ganze Abarbeitung der Blöcke steuert. Ist das richtig? und in die
Unit des Dienstes in der Methode onStart kommt dann dieses rein, und dadurch wird der Thread dann gestartet?
myThread := TWorkerThread.Create(false);
Ich habe auch noch zwei Timer in der BlockVerarbeitung mit drin, muss ich da noch was besonderes beachten?
Und der folgende Teil kommt dann bei onStop-Ereignis des Dienstes rein?
Delphi-Quellcode:
if Assigned(myThread) then
begin
myThread.Terminated;
myThread.WaitFor;
FreeAndNil(myThread);
end;
solange der Thread also nicht beendet wurde läuft er immer wieder durch die Schleife, wenn ich nun den Dienst beende sage ich dem Thread durch den Assigned-Teil, dass er beendet werden soll und er geht aus der Schleife raus? und ruft dann FormCloseQuery aus?
Delphi-Quellcode:
procedure TimeManagerThread.Execute;
begin
while not Terminated do
begin
FormCreate;
end;
FormCloseQuery;
{ Thread-Code hier einfügen }
end;
Frage: FormCreate läuft eigentlich auch in einer endlos-Schleife, Füher hat er das Signal zum sich beenden durch das Klicken auf das Kreuz des Fensters bekommen. Und das FormCreate lief auch nicht in einer Schleife.
wäre dann vielleicht auch das möglich bzw, Sinnvoller? ich hab was von einer Methode Terminate gelesen, kann ich die dann nicht eventuell aufrufen?
Delphi-Quellcode:
procedure TimeManagerThread.Execute;
begin
FormCreate;
if terminated then
FormCloseQuery;
end;
und alles was ich in meinen Dienst reingepackt habe wie wie die oberen beiden Sachen, die meckert er an, wie
Undefinierter Bezeichner: 'TMThread'
Operator oder Semikolon fehlt